2010-12-14 123 views
1

我有这样的字符串数组{0:ADD(10)“,”1:ADD(20)“}我怎么解析这个并获得值“10”,“20”从该字符串,java解析字符串像“0:ADD(10)”

方案是:我试图使用Apache米娜服务器,当我的客户端和服务器之间发送的消息我收到响应作为写客户端和服务器应用“0:ADD(10)”

回答

3

可以使用正则表达式如下:

\\((\\d+)\\) 

提取括号内的数字。有关java正则表达式的更多信息,请参见herehere 注意:由于java分别在开始和结尾分别添加了^$,因此我们必须在要匹配的模式前后添加.*

String[] str = new String[]{"0:ADD(10)","1:ADD(20)"}; 
     Pattern pattern = Pattern.compile("^.*\\((\\d+)\\).*$"); 
     for (int i = 0; i < str.length; i++) 
     { 
      Matcher m = pattern.matcher(str[i]); 
      System.out.println(m.matches()); 
      System.out.println(m.group(1)); 
     } 

打印:

+0

thn kx的回复,我有一个怀疑的天气使用正则表达式或不 – evan 2010-12-14 12:08:13

2
String[] split = "{\"0:ADD(10)\",\"1:ADD(20)\"}".split(","); 
    for (String e : split) { 
     String arg = e.substring(e.indexOf('(')+1, e.indexOf(')')); 
     System.out.println(arg); 
    } 
+0

工作thnk回复 – evan 2010-12-14 12:13:12

1

您可以尝试

int num = Integer.parseInt("0:ADD(10)".split("[()]")[1]); 
0

这一行做的工作:

String[] arr = str.replace("{", "").replace("}", "").replaceAll("\"\\d+:ADD\\((\\d+)\\)\"", "$1").split(","); 
1

可能是有点矫枉过正的,但这应该工作

String input="{\"0:ADD(10)\",\"1:ADD(20)\"}"; 
    Pattern r= Pattern.compile(":ADD\\(([0-9]*)\\)"); 
    Matcher m = r.matcher(input); 
    while(m.find()){ 
     System.out.println(m.group(1)); //Result is here 
    } 
1

使用guava

String digits=(digits=CharMatcher.DIGIT.retainFrom("0:ADD(10)")).substring(1,digits.length());