2013-10-17 127 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]); 
}