阅读java中的下一个单词

Upv*_*ote 23 java java.util.scanner

我有一个文本文件,其中包含以下内容:

ac und
accipio annehmen
ad zu
adeo hinzugehen
...
Run Code Online (Sandbox Code Playgroud)

我读了文本文件并遍历这些行:

Scanner sc = new Scanner(new File("translate.txt"));
while(sc.hasNext()){
 String line = sc.nextLine();       
}
Run Code Online (Sandbox Code Playgroud)

每行有两个单词.java中是否有任何方法可以获取下一个单词,还是必须拆分行字符串来获取单词?

Chr*_*kar 26

您不一定要拆分该行,因为java.util.Scanner的默认分隔符是空格.

您可以在while语句中创建一个新的Scanner对象.

    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);
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 12

您已经在代码的这一行中获得了下一行:

 String line = sc.nextLine();  
Run Code Online (Sandbox Code Playgroud)

为了获得一行的话,我建议使用:

String[] words = line.split(" ");
Run Code Online (Sandbox Code Playgroud)

  • 是的,你应该修改你的while循环:while(sc.hasNextLine()) (3认同)

小智 7

使用Scanners,最终会为每一行产生大量对象.您将为具有大文件的GC生成大量垃圾.而且,它比使用split()慢近三倍.

另一方面,如果按空格(line.split(" "))拆分,如果尝试读取具有不同空白分隔符的文件,代码将失败.如果split()希望你编写一个正则表达式,并且它确实匹配,那么使用它来匹配split("\\s")比空格字符更多的"空格"空格.

PS:对不起,我没有权利对已经给出的答案发表评论.