2013-07-03 106 views
-1

我有10之後和之前TMMJ從下面的字符串來檢索值:解析字符串值

「:XX/10/MJ/TM」

我我能夠從下面的代碼檢索值:

String s=":XX: /10/MJ/TM *"; 
String[] arr = s.split("\\r?\\n?/"); 

for(int i=0;i<arr.length;i++) 
    System.out.println(arr[2]); 

是否有任何有效的方法來做到這一點?

+2

什麼是你的字符串的格式?您要查找的字段總是以'/ 10 /'開頭,後面跟着'/ TM'?它總是第三個字段'/'是字段分隔符嗎? – beny23

+1

for循環已過時...除非您想多次打印 –

+0

在您的示例中,在'10'之後,'TM'之前有'/ MJ /',而不是'MJ'。如果您的規格清晰,我會發佈一個答案。 – jlordo

回答

0

如果字符串的格式是固定(相對於位置和分離器)

String s=":XX: /10/MJ/TM *"; 
System.out.println(s.split("/")[2]); // MJ 
0

我會使用一個正則表達式與一組捕捉有趣的一點:

String s=":XX: /10/MJ/TM *"; 
Pattern p = Pattern.compile(".*10/(.*)/TM.*"); 
Matcher matcher = p.matcher(s); 
matcher.find(); 
System.out.println(matcher.group(1)); 

警告:您應該圍繞find()和group()調用編寫代碼以避免錯誤。

如果您知道有關/分離器,還可以簡化正則表達式:「/()/.*」

0

爲什麼對loop這裏?

您的代碼可以簡單地張貼這樣

String s = ":XX: /10/MJ/TM *"; 
    String[] arr = s.split("\\r?\\n?/"); 
    System.out.println(arr[2]); 
+0

String s =「:XX:/ 10/MJ/TM *」; System.out.println(s.substring(s.indexOf(「10 /」)+ 3,s.indexOf(「/ TM」))); –