无法获取子字符串的子字符串

时间:2013-05-11 20:39:13

标签: java string split

我正在尝试从一个看起来像这样的文件解析一个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];

4 个答案:

答案 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( "," );
}