2014-09-25 18 views
0

字符串的其餘部分:使用模式匹配只得到數值45正則表達式模式匹配器,如何存儲字符串

Java代碼

ArrayList<String> portfolioCount = new ArrayList<String>(); 
String mainText = USA (45) 
final Pattern p = Pattern.compile("\\((.*?)\\)"); 
final Matcher m = p.matcher(mainText); 
m.find();   
portfolioCount.add(m.group(1)); 

存儲的數值USA(45)

我的問題是如何將字符串(即美國)的其餘部分存儲到另一個數組列表中

回答

1

您可以使用前瞻和回顧後,爲了不包括匹配的組中的括號:

ArrayList<String> countryCount = new ArrayList<String>(); 
ArrayList<String> portfolioCount = new ArrayList<String>(); 
String mainText = "USA (45)"; 
final Pattern p = Pattern.compile("(.*?)(?>\\()(\\d+)(?=\\)).*"); 
final Matcher m = p.matcher(mainText); 
m.find(); 
countryCount.add(m.group(1)); //USA 
portfolioCount.add(m.group(2)); //45 
1

內()到另一組號碼前就捕捉部分,

ArrayList<String> portfolioCount = new ArrayList<String>(); 
String mainText = "USA (45)"; 
final Pattern p = Pattern.compile("(\\S+)\\s+\\((.*?)\\)"); 
final Matcher m = p.matcher(mainText); 
while(m.find()){   
portfolioCount.add(m.group(1)); 
portfolioCount.add(m.group(2)); 
System.out.println(portfolioCount); 
} 

輸出

[USA, 45] 

要存儲國名和計數爲兩個獨立的列表,

ArrayList<String> portfolioCount = new ArrayList<String>(); 
ArrayList<String> country = new ArrayList<String>(); 
String mainText = "USA (45)"; 
final Pattern p = Pattern.compile("(\\S+)\\s+\\((.*?)\\)"); 
final Matcher m = p.matcher(mainText); 
while(m.find()){   
portfolioCount.add(m.group(1)); 
country.add(m.group(2)); 
System.out.println(portfolioCount); 
System.out.println(country); 
} 

輸出:

[USA] 
[45] 
相關問題