Java 使用字符串标记器分析字符串两次

Java 使用字符串标记器分析字符串两次,java,regex,string,Java,Regex,String,我从某个过程中得到如下输入字符串 我想用java解析它,然后离开 t3 10.20.30.40 9031 分门别类 我想我可以使用字符串标记器,但我必须标记2次?有没有更好的方法来处理这个问题?使用类。它将为您解析URL。无需使用正则表达式或Stringsplits String url = "service:jmx:t3://10.20.30.40:9031/jndi/weblogic.management.mbeanservers.runtime"; JMXServiceURL jmxSe

我从某个过程中得到如下输入字符串

我想用java解析它,然后离开

t3
10.20.30.40
9031
分门别类 我想我可以使用字符串标记器,但我必须标记2次?有没有更好的方法来处理这个问题?

使用类。它将为您解析URL。无需使用正则表达式或
String
splits

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
使用该类。它将为您解析URL。无需使用正则表达式或
String
splits

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

如果它只是一个以某种方式组合的字符串,并且您可以忽略性能,那么我更喜欢这样一个可读的解决方案(而不是regex;-):

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);
...

如果它只是一个以某种方式组合的字符串,并且您可以忽略性能,那么我更喜欢这样一个可读的解决方案(而不是regex;-):

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);
...

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


如果从7开始使用java,请不要在模式中使用
。它将按数字分组。

正则表达式是一种很好的方法。您应该找到字符串和带有括号的组的模式。也许这对你来说已经足够了:
服务\\:jmx\\:(?[a-z0-9]+)\\:/(?[0-9\\.]+)\\:(?[o-9]+)


如果从7开始使用java,请不要在模式中使用
。它将按数字分组。

进行简单的字符串拆分

    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]);

做一个简单的字符串拆分

    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]);

是的,正则表达式!是的,正则表达式@Maroun Maroun:这是可能的,这对我来说是非常私人的,但我在使用正则表达式时总是要阅读文档。但我总是需要10个月左右的时间;-)对我来说,这实际上取决于特定的用例和环境。毫无疑问:RegEx看起来更专业!我会选择Deepak Bala,如果它始终是一个URL。这取决于您可能会失去多少性能。我真正的意思是,其他解决方案可能更快(但一定不能)。这取决于所执行的解析的总和。@Maroun Maroun:这对我来说可能是非常私人的,但我在使用regex时总是要阅读文档。但我总是需要10个月左右的时间;-)对我来说,这实际上取决于特定的用例和环境。毫无疑问:RegEx看起来更专业!我会选择Deepak Bala,如果它始终是一个URL。这取决于您可能会失去多少性能。我真正的意思是,其他解决方案可能更快(但一定不能)。这取决于执行的解析的总和。