2013-10-17 55 views
1

我需要读取一个文件的格式如下:正则表达式来读取特定的文件格式在Java中

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

和肯定,它减少了串了起来,但我觉得这不是最好的解决方法。如果有人有更好的想法,我很乐意听到!

+2

坦白说,我不认为你会发现一个更优雅的解决方案。优雅!=花式。 'String [] allSystems = scanner.nextLine().split(“),(”);'是一个很干净的方法来做到这一点 – StormeHawke

回答

3

你可以试试:

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

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

接下来,让wxyz,你可以这样做:

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

String[] data = system.replaceAll("\\(|\\);?", "").split(","); 
1

如果你使用line.split("(^\\(|\\),\\(|\\);|,)")然后你会得到一个字符串数组中的每个w,x,y和z作为它自己的元素。数组中的第一个项目将是一个空字符串,但如果你开始在索引1,你可以很容易地使用这个来构建你的目标公司Databeans:

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]); 
}