我正在尝试从一个看起来像这样的文件解析一个String:
Mark Henry, Tiger Woods, James the Golfer, Bob,
3, 4, 5, 1,
1, 2, 3, 5,
6, 2, 1, 4,
为了便于使用,我想拆掉String的第一行,因为它将是唯一一个无法转换为整数值的行(其余的将存储在一个双整数数组中[line] ] [值]);
我尝试使用String.split("\\\n")
将每一行划分为自己的String,这有效。但是,我无法将新字符串划分为String.split("\\,")
的子字符串。我不确定发生了什么:
String[] firstsplit = fileOne.split("\\\n");
System.out.println("file split into " + firstsplit.length + " parts");
for (int i = 0; i < firstsplit.length; i++){
System.out.println(firstsplit[i]); // prints values to verify it works
}
String firstLine = firstsplit[0];
String[] secondSplit = firstLine.split("\\,");
System.out.println(secondSplit[0]); // prints nothing for some reason
我已经尝试了各种不同的东西,似乎没有任何工作(复制到新的String是尝试让它工作)。有什么建议吗?
编辑:我已将其更改为String.split(",")
并尝试String.split(", ")
但我之后仍然无法打印。
现在我发现可能第一个位置是空白的......经过测试我发现这是真的,一切都适用于firstsplit[1]
;
答案 0 :(得分:3)
您正在尝试拆分\\,
,转换为实际值\,
。您只想转义,
。
答案 1 :(得分:2)
逗号,
之前不需要\
,因为它不是特殊字符。尝试使用,
代替\\,
,\,
转换为{{1}}(不仅是逗号,也是反斜杠)。
答案 2 :(得分:0)
您不仅不需要转义逗号,而且换行符也不需要三个反斜杠:
String[] firstSplit = fileOne.split("\n");
那会很好用。我用您指定的字符串测试了您的代码,它实际上工作得很好,它也可以很好地分裂而没有无关的转义......
您是否实际使用问题中提供的字符串数据对其进行了测试,或者实际数据可能是其他数据。我担心回车(例如Windows文件中的\r\n
),但这在我的测试中也无关紧要。如果您可以清理实际正在解析的String数据,并提供原始字符串(fileOne
)的示例输出,这将有很大帮助。
答案 3 :(得分:0)
您可以将文件加载到行列表中:
fin = new FileInputStream(filename);
bin = new BufferedReader(new InputStreamReader(fin));
String line = null;
List<String> lines = new ArrayList<>();
while (( line = bin.readLine()) != null ) {
lines.add( line );
}
fin.close();
当然,您必须将这些内容包含在一些适合您的异常处理的try catch块中。然后解析从第二个开始的行,如下所示:
for ( int i = 1; i < lines.size(); i++ ) {
String[] values = lines.get( i ).split( "," );
}