猿问

当使用 java.util.Scanner 从文件中读取字符串并使用换行符作为分隔符时

我尝试使用java.util.Scanner. 当我尝试用作\n定界符时,当我尝试向它们添加更多文本时,生成的字符串会做出奇怪的反应。

我有一个名为“test.txt”的文件并尝试从中读取数据。然后我想向每个字符串添加更多文本,类似于打印方式Hello World!

String helloWorld = "Hello "+"World!";
System.out.println(helloWorld);.

我尝试将数据与 结合起来+,我尝试过+=,我尝试过String.concat(),这以前对我有用,而且通常仍然有效。

我还尝试使用不同的定界符,或者根本不使用定界符,这两种方法都按我的预期工作,但我需要在换行符处分隔字符串。

最小可重现示例的文件test.txt包含以下文本(每行末尾有一个空格):

零:
一:
二:
三:

void minimalReproducibleExample() throws Exception {  //May throw an exception if the test.txt file can't be found


    String[] data = new String[4];


    java.io.File file = new java.io.File("test.txt");

    java.util.Scanner scanner = new java.util.Scanner(file).useDelimiter("\n");


    for (int i=0;i<4;i++) {

        data[i] = scanner.next();     //read the next line

        data[i] += i;                 //add a number at the end of the String

        System.out.println(data[i]);  //print the String with the number

    }


    scanner.close();

}

我希望这段代码打印出这些行:

零:0
一:1
二:2
三:3

我得到这个输出:

0ero:
1ne:
2wo:
三: 3

\n为什么在用作定界符时没有得到预期的输出?


喵喔喔
浏览 169回答 2
2回答

天涯尽头无女友

最test.txt有可能使用 Windows行尾表示 \r\n,这导致回车符\rString在读取后仍然存在。确保test.txt使用\nas line delimtier 或\r\n在Scanner.useDelimiter().

UYOU

问题很可能是错误的定界符。如果您使用 Windows 10,新的行分隔符是\r\n。只是为了独立于平台使用System.getProperty("line.separator")而不是硬编码\n。
随时随地看视频慕课网APP

相关分类

Java
我要回答