2016-05-10 2 views
-1
public class Try{ 
public static void main (String args[]) throws IOException { 
    BufferedReader in = new BufferedReader(new FileReader("Try.txt")); 
    Scanner sc = new Scanner(System.in); 
    System.out.print("Enter the subtring to look for: "); 
    String Word=sc.next(); 
    String line=in.readLine(); 
    int count =0; 
    String s[]; 
    do 
    { 
     s=line.split(" "); 
     for(int i=0; i < s.length; i++) 
     { 
      String a = s[i]; 
      if(a.contains(Word)) 
       count++; 
     } 
     line=in.readLine(); 
    }while(line!=null); 
    System.out.print("There are " +count+ " occurences of " +Word+ " in "); 
    java.io.File file = new java.io.File("Try.txt"); 
    Scanner input = new Scanner(file); 
    while(input.hasNext()) 
    { 
      String word = input.nextLine(); 
      System.out.print(word); 
    } 

    } 
} 

Целью моей программы является запросить у пользователя определенное слово (слова), которое будет проверяться в текстовом файле, и если оно существует , он будет подсчитывать количество раз, когда введенное пользователем слово происходит в текстовом файле. Пока моя программа может искать только одно слово. Если я попробую два слова, разделенных пробелом, будет поиск и подсчет только первого слова для его количества. Любые советы по поиску нескольких слов?Запросить слово и проверить его количество в текстовом файле

+0

Какая логика в программе заставит вас думать, что она будет искать несколько слов? У вас есть строка 'if (a.contains (Word)) и один счетчик. Вам нужно будет сохранить счетчики за введенное слово. – KevinO

+0

'String Word = sc.next();' Это означает, что вы читаете 1 слово в 'String' под названием' Word'. Даже если вы должны изменить эту строку, вам нужно будет сделать больше, чтобы гарантировать, что два слова, которые вы ищете, не смежны. Вы также можете запустить отладчик, чтобы проверить содержимое «Word», чтобы увидеть, что он содержит только одно значение. См. [Scanner.next()] (https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#next()) –

ответ

1

Я следовал буквально название этого вопроса и поэтому я предлагаю этот алгоритм:

public static void main(String[] args) throws IOException { 
    BufferedReader in = new BufferedReader(new FileReader("Test.txt")); 
    Scanner sc = new Scanner(System.in); 
    System.out.print("Enter the subtring to look for: "); 
    String word = sc.next(); 
    String line = in.readLine(); 
    int count = 0; 
    // here is where the efficiently magic happens 
    do { 
    // 1. you dont need to split a line by spaces, too much overhead... 
    // 2. and you dont need to do counter++ 
    // 3. do instead: calculate the number of coincidences that the word is 
    //repeated in a whole line...that is what the line below does.. 
     count += (line.length() - line.replace(word, "").length())/word.length(); 
    //the rest looks fine 

    //NOTE: if you need a whole word then wrap the input of the user and add the empty spaces at begin and at the end...so the match will be perfect to a word 

     line = in.readLine(); 
    } while (line != null); 
    System.out.print("There are " + count + " occurences of " + word + " in "); 
    } 

Edit:

если вы хотите проверить более одного слова в документе, то используйте это

public static void main(String[] args) throws IOException { 
    BufferedReader in = new BufferedReader(new FileReader("Test.txt")); 
    Scanner sc = new Scanner(System.in); 
    System.out.print("Enter the subtring to look for: "); 
    String input = sc.nextLine(); 
    String[] word = input.split(" "); 
    String line = in.readLine(); 
    int count = 0; 
    do { 
     for (String string : word) { 
      count += (line.length() - line.replace(string, "").length())/string.length(); 
     } 

     line = in.readLine(); 
    } while (line != null); 
    System.out.print("There are " + count + " occurences of " + Arrays.toString(word) + " in "); 
} 
+0

Это было намного короче, но кажется, что проблема по-прежнему сохраняется. Я попытался ввести два слова, но записано только первое слово (используя ваш алгоритм). Любой способ «исправить» это? Кстати, спасибо за ваши предложения :) Обязательно имейте это в виду. – REA98

+1

Я исправлю это ... вы даете ввод в той же линии separete по пространству ??? –

+0

да, разделенные пробелом! – REA98

Смежные вопросы