【发布时间】:2016-11-16 04:07:33
【问题描述】:
为什么Java String.split() 在处理代码中定义的字符串与处理数字时从文件中读取的字符串时会产生不同的结果?具体来说,我有一个名为“test.txt”的文件,其中包含用空格分隔的字符和数字:
G H 5 4
split 方法不会像预期的那样在空格上进行拆分。但是,如果在代码中创建了一个字符串变量,其相同的字符和数字由空格分隔,则 split() 的结果是四个单独的字符串,一个用于字符和数字。下面的代码演示了这种差异:
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
public class SplitNumber {
//Read first line of text file
public static void main(String[] args) {
try {
File file = new File("test.txt");
FileReader fr = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fr);
String firstLine;
if ((firstLine = bufferedReader.readLine()) != null) {
String[] firstLineNumbers = firstLine.split("\\s+");
System.out.println("First line array length: " + firstLineNumbers.length);
for (int i=0; i<firstLineNumbers.length; i++) {
System.out.println(firstLineNumbers[i]);
}
}
bufferedReader.close();
String numberString = "G H 5 4";
String[] numbers = numberString.split("\\s+");
System.out.println("Numbers array length: " + numbers.length);
for (int i=0; i<numbers.length; i++) {
System.out.println(numbers[i]);
}
} catch(Exception exception) {
System.out.println("IOException occured");
exception.printStackTrace();
}
}
}
结果是:
First line array length: 3
G
H
5 4
Numbers array length: 4
G
H
5
4
为什么文件中的数字与代码中定义的相同字符串的解析不同?
【问题讨论】:
-
文件的内容是什么?
-
文件中的最后一个空格好像不是空格
-
找到一个十六进制编辑器并检查文件中的实际内容。
\s仅匹配 `\t\n\x0B\f\r` 但还有一些其他“似乎是空白”字符 -
顺便说一句,一个格式正确的问题 - 做出了很好的改变
-
只是一个想法,您可以尝试
split("[\\s\\h]+")甚至split("[\\s\\h\\v]+")。似乎它会包含更多类似空格的字符。有关更多信息,请参阅文档。