我想拆分字符串說[AO_12345678, Real Estate]
爲AO_12345678
和Real Estate
正則表達式分裂Java中的字符串
我該怎麼使用正則表達式做到這一點在Java中?
主要問題米麪對的是避免「[」和「]」
請幫助
我想拆分字符串說[AO_12345678, Real Estate]
爲AO_12345678
和Real Estate
正則表達式分裂Java中的字符串
我該怎麼使用正則表達式做到這一點在Java中?
主要問題米麪對的是避免「[」和「]」
請幫助
使用正則表達式另一種選擇(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*+([^\\]]*+)\\]"
一個簡單的方法,假設所有的輸入格式是一致的,是完全忽略正則表達式,只是把它分解。像下面的內容將工作:
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();
當然,如你所願,你可以定製這個 - 你可能要檢查括號是否刪除它們,例如之前存在。或者,您可能希望在逗號前保留任何空格作爲第一個字符串的一部分。這應該給你一個修改你的特定需求的基礎。
而在這樣一個簡單的例子中,我更喜歡像上面這樣的代碼提取兩個字符串的正則表達式 - 我認爲前者更清晰!
謝謝大家,但我只是想避免廣泛的字符串操作。 – samarth
「廣泛的」字符串操作最有可能比簡單的正則表達式操作更可讀。我會堅持。 – atamanroman
它真的必須是正則表達式嗎?
如果不是:
String s = "[AO_12345678, Real Estate]";
String[] split = s.substring(1, s.length()-1).split(", ");
我會去的務實之道:
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(",");
如果字符串總是與 '[]' 你可以串它不檢查包圍。
你也可以使用StringTokenizer。下面是代碼:
String str="[AO_12345678, Real Estate]"
StringTokenizer st=new StringTokenizer(str,"[],",false);
String s1 = st.nextToken();
String s2 = st.nextToken();
S1 = AO_12345678
S1 =房地產
參考Javadoc文檔閱讀的StringTokenizer
http://download.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html
是否數據始終端和用[]開始? – Kaj