我错了吗?当我设置变量param =“ MOON”时,我需要得到333#444,但我得到的是:333#444:JUPITER = 555。所以我一次只需要一个值。
final String parameters = "WORLD=111#222:MOON=333#444:JUPITER=555:SATURN=666:";
final String param = "MOON";
Pattern pattern = Pattern.compile("(.*)(" + param + ")=(.*)(:+)(.*)");
Matcher matcher = pattern.matcher(parameters);
if(matcher.matches()) {
System.out.println("3: " + matcher.group(3)); // Value that I needed: 333#444
}
谢谢。
最佳答案
我不太确定,但是也许您想要提取所有key = value字段?如果是这种情况,则应在:
字符处拆分字符串,然后自行处理所有部分。然后将这些字符串部分与正则表达式([^=]+)=(.*)
匹配,或者更好的是,只需将每个部分拆分为=
字符。在这种情况下,您甚至不需要正则表达式,并可能节省程序执行时间!通过搜索MOON= ...
可以轻松找到MOON
表达式。
编辑:我做了以下旧的Java样式测试程序(最有可能可以改进):
class Test
{
public static void main(String argv[])
{
String parameter="WORLD=111#222:MOON=333#444:JUPITER=555:SATURN=666";
String[] elements=parameter.split(":");
for (int i=0; i < elements.length; i++) {
String[] parts=elements[i].split("=", 2);
if ((parts.length == 2) && (parts[0].equals("MOON"))) {
System.out.println("MOON is "+parts[1]);
}
}
}
};
输出:
MOON is 333#444
在许多情况下,使用正则表达式是过大的,通常可以避免使用它,从而节省了执行时间。如果您的字符串很长,则可以只搜索
MOON
,然后从中搜索下一个:
或字符串结尾,然后使用split,但是在这种情况下,我可能会使用正则表达式。这取决于您是否也需要其他字段。关于java - 根据 key 获取值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12601554/