我必须从以下字符串中获取索引值:
Home.number[12].parent.
我希望得到12的值。
以下是我的尝试:
//escape . / [ ]
private static final String pattern = "Home\\.number\\[([0-9]*)\\]*";
private static final Pattern addressPattern = Pattern.compile(pattern);
private static int getIndex(String input, Pattern pattern){
Matcher m = pattern.matcher(input);
if (m.matches()){
return Integer.valueOf(m.group(2));
}
return -1;
}
public static void main(String[] args){
System.out.println(getIndex("Home.number[123].parent", addressPattern);
System.out.println(getIndex("Home.number[456].child", addressPattern);
}
我两回来都是-1
,这意味着找不到匹配项。
使用调试器,我发现m.matches()
正在返回false
。
我无法弄明白为什么。
P.S:我也尝试过使用Pattern.quote("Home.number[([0-9]*])*")
和StringUtils.EscapeJava("Home.number[([0-9]*)]*")
。两者都没有返回任何匹配的结果。
答案 0 :(得分:3)
您的Pattern
应该类似于
private static final String pattern = "Home\\.number\\[(\\d+)\\]\\..*";
private static final Pattern addressPattern = Pattern.compile(pattern);
您的匹配器只有1
组。
private static int getIndex(String input, Pattern pattern) {
Matcher m = pattern.matcher(input);
if (m.matches()) {
return Integer.parseInt(m.group(1));
}
return -1;
}
您需要在main
的通话中关闭第二个电话号码。像
public static void main(String[] args) {
System.out.println(getIndex("Home.number[123].parent", addressPattern));
System.out.println(getIndex("Home.number[456].child", addressPattern));
}
当我进行这些更改时,我得到了预期的
123
456
答案 1 :(得分:1)
Store,Product
a, 1
a, 2
b, 3
b, 2
c, 3
c, 1
d, 1
d, 2
d, 3
更改为Store,Store Replacement
a,-
b,-
c,-
d,a
(在最后"Home\\.number\\[([0-9]*)\\]*"
之前添加点数)"Home\\.number\\[([0-9]+)\\].*"
*
来电中添加右括号。像这样:
return Integer.valueOf(m.group(1));
答案 2 :(得分:1)
如果删除方括号之间的所有内容,则可以在一行中删除:
private static int getIndex(String input) {
return input.matches(".*\\[\\d+].*") ? -1 : Integer.parseInt(input.replaceAll(".*\\[|].*", ""));
}