作爲輸入參數I可以有兩種類型的字符串:Java。正則表達式。如何解析?
codeName=SomeCodeName&codeValue=SomeCodeValue
或
codeName=SomeCodeName
而不codeValue
。
codeName
和codeValue
是關鍵。
如何使用正則表達式來返回鍵的值?在這個例子中,它將只返回SomeCodeName
和SomeCodeValue
。
作爲輸入參數I可以有兩種類型的字符串:Java。正則表達式。如何解析?
codeName=SomeCodeName&codeValue=SomeCodeValue
或
codeName=SomeCodeName
而不codeValue
。
codeName
和codeValue
是關鍵。
如何使用正則表達式來返回鍵的值?在這個例子中,它將只返回SomeCodeName
和SomeCodeValue
。
我不會打擾與正則表達式。帶有簡單標記('&','=')的String.split將完成這項工作。
String[] args = inputParams.split("&");
for (String arg: args) {
String[] split = arg.split("=");
String name = split[0];
String value = split[1];
}
查看番石榴的'Splitter.MapSplitter' –
+1,但我認爲你應該將'arg.split(「=」)''改爲'arg.split(「=」,2)',因爲允許等號查詢字符串參數的值。 – ruakh
請注意,Argument to String.split是一個正則表達式 –
考慮使用番石榴的Splitter
String myinput = "...";
Map<String, String> mappedValues =
Splitter.on("&")
.withKeyValueSeparator("=")
.split(myinput);
最簡單的方法是,首先分割源的字符串,然後打擊2份運行2個單獨的正則表達式。
Pattern pCodeName = Pattern.compile("codeName=(.*)");
Pattern pCodeValue = Pattern.compile("codeValue=(.*)");
String[] parts = str.split("\\&");
Matcher m = pCodeName.matcher(parts[0]);
String codeName = m.find() ? m.group(1) : null;
String codeValue = null;
if (parts.length > 1) {
m = pCodeValue.matcher(parts[1]);
codeValue = m.find() ? m.group(1) : null;
}
}
但是,如果你願意,你也可以說:
Pattern p = Pattern.compile("codeName=(\\w+)(\\&codeValue=(\\w+))?");
Matcher m = p.matcher(str);
String codeName = null;
String codeValue = null;
if (m.find()) {
codeName = m.group(1);
codeValue = m.groupCount() > 1 ? m.group(2) : null;
}
IMO第二種選擇會更好,因爲它會更好更嚴格的比賽 –
將您SomeCodeName和SomeCodeValue 可含有或=? –