Подтвердить что ты не робот

Читать следующее слово в java

У меня есть текстовый файл, имеющий следующий контент:

ac und
accipio annehmen
ad zu
adeo hinzugehen
...

Я прочитал текстовый файл и перебираю строки:

Scanner sc = new Scanner(new File("translate.txt"));
while(sc.hasNext()){
 String line = sc.nextLine();       
}

Каждая строка имеет два слова. Есть ли какой-либо метод в java для получения следующего слова или мне нужно разделить строку, чтобы получить слова?

4b9b3361

Ответ 1

Вам не обязательно разделять строку, потому что java.util.Scanner default delimiter - это пробел.

Вы можете просто создать новый объект Scanner в своем заявлении while.

    Scanner sc2 = null;
    try {
        sc2 = new Scanner(new File("translate.txt"));
    } catch (FileNotFoundException e) {
        e.printStackTrace();  
    }
    while (sc2.hasNextLine()) {
            Scanner s2 = new Scanner(sc2.nextLine());
        while (s2.hasNext()) {
            String s = s2.next();
            System.out.println(s);
        }
    }

Ответ 2

Вы уже получили следующую строку в этой строке вашего кода:

 String line = sc.nextLine();  

Чтобы получить слова строки, я бы рекомендовал использовать:

String[] words = line.split(" ");

Ответ 3

Используя Scanner s, вы создадите множество объектов для каждой строки. Вы создадите приличное количество мусора для GC с большими файлами. Кроме того, это почти в три раза медленнее, чем использование split().

С другой стороны, если вы разделяете пространство (line.split(" ")), код будет терпеть неудачу, если вы попытаетесь прочитать файл с другим разделителем пробелов. Если split() ожидает, что вы напишете регулярное выражение, и оно все равно будет соответствовать, используйте split("\\s") вместо этого, что соответствует "бит" больше пробелов, чем просто пробельный символ.

P.S.: Извините, я не имею права комментировать уже предоставленные ответы.

Ответ 4

вам лучше читать строку, а затем делать раскол.

File file = new File("path/to/file");
String words[]; // I miss C
String line;
HashMap<String, String> hm = new HashMap<>();
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8")))
{
    while((line = br.readLine() != null)){
        words = line.split("\\s");
        if (hm.containsKey(words[0])){
                System.out.println("Found duplicate ... handle logic");
        }
        hm.put(words[0],words[1]); //if index==0 is ur key
    }

} catch (FileNotFoundException e) {
        e.printStackTrace();
} catch (IOException e) {
        e.printStackTrace();
}