1

我需要读取这种格式的文件:

(w,x,y,z),(w,x,y,z), ... ,(w,x,y,z);

全部在一条线上。

//编辑:

我最终还需要对以下文件执行此操作:

(w,x,y,z_1 ... z_n),(w,x,y,z_1 ... z_n), ... ,(w,x,y,z_1 ... z_n);

所以简单地阅读过去的 3 个逗号并不会减少它。

我的计划是使用 Scanner 类将整个文件读入字符串,然后将其拆分为 (w,x,y,z) 部分的数组,然后将其拆分为实际的 w、x、y 和 z。最终,文件中的数据最终会出现在对象列表中,例如:

public class DataBean {
    private String w, x, y, z;
    ...
}

不过,我很难为此想出一个正则表达式。我试过了

String[] allSystems = scanner.nextLine ( ).split ( "),(" );

当然,它切断了字符串,但我觉得这不是最优雅的解决方案。如果有人有更好的主意,我很想听听!

4

2 回答 2

3

你可以试试:

String[] allSystems = scanner.nextLine ( ).split ( "(?<=\\)),(?<!\\()" );

你得到(w,x,y,z), (w,x,y,z),(w,x,y,z);

接下来,对于 get w, x, y, z,您可以执行以下操作:

String system = "(w,x,y,z);";

String[] data = system.replaceAll("\\(|\\);?", "").split(",");
于 2013-10-17T19:36:44.073 回答
1

如果你使用line.split("(^\\(|\\),\\(|\\);|,)")then 你会得到一个字符串数组,其中每个 w、x、y 和 z 作为数组中自己的元素。数组中的第一项将是一个空字符串,但如果您从索引 1 开始,您可以轻松地使用它来构造您的 DataBean 对象:

String[] data = line.split("(^\\(|\\),\\(|\\);|,)");

List<DataBean> dataBeans = new ArrayList<DataBean>();
for (int i = 1; i < data.length; i += 4) {
    dataBeans.add(new DataBean(data[i], data[i+1], data[i+2], data[i+3]);
}
于 2013-10-17T19:43:55.697 回答