как исключить проверку слов в цитатах с помощью Java - PullRequest
0 голосов
/ 30 апреля 2018

Я впервые делаю это, поэтому я не хотел быть длинным. Я создаю перекрестную ссылку из чтения Java-программы. Я должен исключить ключевые слова Java, прокомментированные слова и слова в цитатах. Я справился с исключением ключевых слов java и закомментированных слов, но у меня возникли проблемы, за исключением тех, которые в кавычках.

public class CrossReference {
static Scanner in;
static PrintWriter out;
static int currentLine = 0;

public static void main(String[] args) throws IOException {
    in  = new Scanner (new FileReader("keywords.txt"));
    out = new PrintWriter (new FileWriter("crossreference.out"));
    LinkedList keywords = new LinkedList();
    while (in.hasNextLine()) {
        String word = in.nextLine();
        keywords.addTail(new NodeData(word));
    }
    in  = new Scanner (new FileReader("program.txt"));
    BinaryTree bst = new BinaryTree();
    while(in.hasNextLine()){
        String line = in.nextLine();
        out.printf("%3d. %s\n", ++currentLine,line);
        getWordsOnLine(line,bst,keywords);
    }
    out.printf("\nWords                LineNumber\n\n");
    bst.inOrder();
    out.close();
}

public static void getWordsOnLine(String inputLine, BinaryTree bst, LinkedList keywords){
    Scanner inLine = new Scanner(inputLine);
    inLine.useDelimiter("[^a-zA-Z//\"*]+");
    boolean b = true;
    while(inLine.hasNext() && b){
        String word = inLine.next().toLowerCase();
        if (word.contains("/") || word.contains("\"") || word.contains("*")) {
            b = false;
        } //this works for the commented words but not so well for the ones in quotes as it also excludes words after those in quotes
        else {
            boolean key = false;
            Node curr = keywords.head;
            while (curr != null) {
                if (curr.data.str.equals(word)) key = true;
                curr = curr.next;
            }
            if (key == false) {
                TreeNode node = bst.findOrInsert(new TreeNodeData(word));
                ListNode p = new ListNode(currentLine);
                p.next = node.data.firstLine;
                node.data.firstLine = p;
            }
        }  
    }    
}   

}

1 Ответ

0 голосов
/ 01 мая 2018
  1. Разбейте вашу строку по пространству на массив.
  2. Итерация по массиву, проверка того, какие элементы начинаются с кавычек и являются словами
  3. Сумма

Таким образом, код будет выглядеть так:

public class HelloWorld
{
  public static void main(String[] args)
  {
    String a = "COPY PASTE ORIGINAL HERE";
    String[] arr = a.split(" ");
    int count = 0;
    for(String each: arr){
      if(each.charAt(0) != '\"' && each.charAt(0) < '0' || each.charAt(0) > '9'){ 
        count++;
      }
    }
    System.out.println("words="+count);
  }
}
...