1

I am getting input string as below from some procedure

service:jmx:t3://10.20.30.40:9031/jndi/weblogic.management.mbeanservers.runtime

I want to parse it in java and get out

t3
10.20.30.40
9031

into separate strings I think I can use string tokenizer but I have to tokenize 2 times ?Any better way to handle this?

4

4 回答 4

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
于 2013-04-18T11:21:26.863 回答
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);
...
于 2013-04-18T11:22:20.683 回答
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]);
于 2013-04-18T11:24:26.290 回答
1

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

请参阅Java 正则表达式

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

于 2013-04-18T11:23:12.350 回答