我从某些程序
获取输入字符串,如下所示service:jmx:t3://10.20.30.40:9031/jndi/weblogic.management.mbeanservers.runtime
我想在java中解析它并退出
t3
10.20.30.40
9031
分成单独的字符串 我想我可以使用字符串标记符,但我必须标记2次?有没有更好的方法来处理它?</ p>
答案 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]);