2011-07-13 42 views
1

我想拆分字符串說[AO_12345678, Real Estate]AO_12345678Real Estate正則表達式分裂Java中的字符串

我該怎麼使用正則表達式做到這一點在Java中?

主要問題米麪對的是避免「[」和「]」
請幫助

+2

是否數據始終端和用[]開始? – Kaj

回答

0

使用正則表達式另一種選擇(RE )捕獲組:

private static void extract(String text) { 
    Pattern pattern = Pattern.compile("\\[(.*),\\s*(.*)\\]"); 
    Matcher matcher = pattern.matcher(text); 
    if (matcher.find()) { // or .matches for matching the whole text 
     String id = matcher.group(1); 
     String name = matcher.group(2); 
     // do something with id and name 
     System.out.printf("ID: %s%nName: %s%n", id, name); 
    } 
} 

如果速度/存儲器是一個問題,該RE可以被優化以(使用物主量詞代替貪婪的)
"\\[([^,]*+),\\s*+([^\\]]*+)\\]"

1

一個簡單的方法,假設所有的輸入格式是一致的,是完全忽略正則表達式,只是把它分解。像下面的內容將工作:

String[] parts = input.split(","); // parts is ["[AO_12345678", "Real Estate]"] 
String firstWithoutBrace = parts[0].substring(1); 
String secondWithoutBrace = parts[1].substring(0, parts[1].length() - 1); 
String first = firstWithoutBrace.trim(); 
String second = secondWithoutBrace.trim(); 

當然,如你所願,你可以定製這個 - 你可能要檢查括號是否刪除它們,例如之前存在。或者,您可能希望在逗號前保留任何空格作爲第一個字符串的一部分。這應該給你一個修改你的特定需求的基礎。

而在這樣一個簡單的例子中,我更喜歡像上面這樣的代碼提取兩個字符串的正則表達式 - 我認爲前者更清晰!

+0

謝謝大家,但我只是想避免廣泛的字符串操作。 – samarth

+0

「廣泛的」字符串操作最有可能比簡單的正則表達式操作更可讀。我會堅持。 – atamanroman

4

它真的必須是正則表達式嗎?

如果不是:

String s = "[AO_12345678, Real Estate]"; 
String[] split = s.substring(1, s.length()-1).split(", "); 
2

我會去的務實之道:

String org = "[AO_12345678, Real Estate]"; 
String plain = null; 
if(org.startsWith("[") { 
    if(org.endsWith("]") { 
    plain = org.subString(1, org.length()); 
    } else { 
    plain = org.subString(1, org.length() + 1); 
    } 
} 

String[] result = org.split(","); 

如果字符串總是與 '[]' 你可以串它不檢查包圍。