2017-01-18 9 views
1

Я пытаюсь подсчитать количество строк, появляющихся в файле. Я хочу найти количество раз, когда «A, E, I, O, U» появляется точно в этом порядке. Вот текстовый файл:Подсчитайте количество раз, когда набор символов появляется в файле без BufferedReader

 
AEIOU aeiou baeiboeu bbbaaaaaa beaeiou caeuoi ajejijoju aeioo 
aeiOu ma me mi mo mu 
take it OUT! 

Я хочу, чтобы метод возвращал сколько раз в файл. Любая идея о том, как я могу это сделать? Уловка я хочу сделать это, не используя BufferedReader. Я просто могу прочитать файл, используя Scanner. Есть ли способ сделать это?

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

import java.util.*; 
import java.io.*; 

public class AEIOUCounter 
{ 
    public static final String DELIM = "\t"; 

    public static void main(String[] args) 
    { 
    File filename = new File("aeiou.txt"); 

    try 
    { 
     Scanner fileScanner = new Scanner(new File(filename)); 

     while(fileScanner.hasNextLine()) 
     { 
     System.out.println(fileScanner.nextLine()); 
     } 
    } 
    catch(IOException e) 
    { 
     System.out.println(e); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 
    fileScanner.close(); 
    } 
} 
+0

Вы помещаете 'BufferedReader' на вершине' InputStream'. Не ставьте его и используйте 'InputStream' и декодируйте каждый байт в String. –

+0

Возможный дубликат [Read/convert InputStream to String] (http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string) –

+0

Что вы пробовали? Каков ожидаемый результат? Кроме того, вставка содержимого файла в ваш вопрос вместо скриншота поможет другим использовать один и тот же контент для целей тестирования. – ericbn

ответ

1

Что вы сейчас делаете, это печать всех строк в файле.

fileScanner.hasNextLine() 
fileScanner.nextLine() 

Но то, что вы ищете, отфильтровывать отдельные слова в файле: ответ

Path path = Paths.get("/path/to/file"); 
Scanner sc = new Scanner(path); 

int counter = 0; 
while (sc.hasNext()) { 
    String word = sc.next(); 
    if (word.equalsIgnoreCase("AEIOU")) { 
     counter += 1; 
    } 
} 
System.out.print("Number of words: " + counter); 
+0

Да, он хочет достичь этого, не используя InputStream. Это не произойдет со Сканером. Сканер использует InputStream. –

1

Smurf является большим. Стоит отметить, что если вы используете Java 8, вы можете избежать использования Scanner на всех, и сделать это в одном выражении:

long count = Files.lines(Paths.get("aeiou.txt")) 
        .flatMap(s -> Arrays.stream(s.split(" "))) 
        .filter(s -> s.equalsIgnoreCase("aeiou")) 
        .count(); 
+0

Я не хочу быть Гринчем, но 'Files.lines' использует BufferedReader :) –