字符串:美国(45)
使用模式匹配仅获取数值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));
将数值存储到arrayList中, 我的问题是如何将其余的字符串(即美国)存储到另一个数组列表
答案 0 :(得分:1)
答案 1 :(得分: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]
答案 2 :(得分:1)
您可以使用lookahead和lookbehind,以便不在匹配的组中包含括号:
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