使用字符串标记生成器解析字符串两次

时间:2013-04-18 11:14:26

标签: java regex string

我从某些程序

获取输入字符串,如下所示
service:jmx:t3://10.20.30.40:9031/jndi/weblogic.management.mbeanservers.runtime

我想在java中解析它并退出

t3
10.20.30.40
9031

分成单独的字符串 我想我可以使用字符串标记符,但我必须标记2次?有没有更好的方法来处理它?<​​/ p>

4 个答案:

答案 0 :(得分:12)

使用JMXServiceUrl课程。它会为您解析URL。无需与正则表达式或String分裂进行斗争。

String url = "service:jmx:t3://10.20.30.40:9031/jndi/weblogic.management.mbeanservers.runtime";
JMXServiceURL jmxServiceURL = new JMXServiceURL(url);
System.out.println(jmxServiceURL.getHost());
System.out.println(jmxServiceURL.getPort());
System.out.println(jmxServiceURL.getProtocol());

<强>打印

10.20.30.40
9031
t3

答案 1 :(得分:2)

如果它只是某种方式组成的字符串,你可以忽略性能,我宁愿一个可读的解决方案(超过正则表达式;-))像这样:

int pos_1 = input.indexOf("//");

String s1 = input.substring(0, pos_1);
String input_2 = input.substring(pos_1 + 2);

int pos_2 = input_2.indexOf(":");
String s2 = input_2.substring(0, pos_2);
...

答案 2 :(得分:1)

正则表达式是一种很好的方法。你应该找到你的字符串的模式,并用括号分组你想要的。也许这对你来说已经足够了: service\\:jmx\\:(?<groupName01>[a-z0-9]+)\\://(?<groupName02>[0-9\\.]+)\\:(?<groupName03>[o-9]+)

请参阅Java Regex

如果您使用7之前的java,请不要在模式中使用?<groupName>。它将按编号分组。

答案 3 :(得分:1)

做一个简单的字符串拆分

    String s = "service:jmx:t3://10.20.30.40:9031/jndi/weblogic.management.mbeanservers.runtime";
    String tokens[] = s.split("[:/]");
    System.out.println(tokens[2]);
    System.out.println(tokens[5]);
    System.out.println(tokens[6]);