我错了吗?当我设置变量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/

10-10 01:38