1

我正在尝试从看起来像这样的文件中解析字符串:

Mark Henry, Tiger Woods, James the Golfer, Bob,
3, 4, 5, 1,
1, 2, 3, 5,
6, 2, 1, 4,

为了方便使用,我想将字符串的第一行拆分出来,因为它将是唯一不能转换为整数值的行(其余的将存储在整数的双精度数组中[line][value ]);

我尝试使用String.split("\\\n")将每一行划分为自己的字符串,这很有效。但是,我无法将新字符串划分为带有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.split(",")并尝试过String.split(", ") ,但之后我仍然无法打印。

现在我突然想到,也许第一个位置是空白的……经过测试,我发现这是真的,一切正常firstsplit[1]

4

4 回答 4

3

您正在尝试 split \\,,这将转换为实际 value \,。你只想逃跑,

于 2013-05-11T20:41:47.090 回答
2

逗号之前,不需要\,因为它不是特殊字符。尝试使用,而不是\\,,它被翻译为\,(不仅是逗号,也是反斜杠)。

于 2013-05-11T20:43:57.137 回答
0

您不仅不需要转义逗号,而且换行符也不需要三个反斜杠:

String[] firstSplit = fileOne.split("\n");

那会很好用。我用您指定的字符串测试了您的代码,它实际上工作得很好,而且它也工作得很好,没有多余的转义符......

您是否使用问题中提供的字符串数据对其进行了实际测试,或者实际数据可能是其他数据。我担心回车(\r\n例如在 Windows 文件中),但这在我的测试中也没关系。如果您可以清理您实际解析的字符串数据,并提供原始字符串 ( fileOne) 的示例输出,那将有很大帮助。

于 2013-05-11T21:08:17.037 回答
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( "," );
}
于 2013-05-11T21:42:28.610 回答