我有一个包含字母数字术语的字符串,如下所示。我想将字母提取到数组中。我写了以下代码。
String pro = "1a1a2aa3aaa4aaaa15aaaaa6aaaaaa";
String[] p = pro.split("^([0-9].*)$");
Pattern pattern = Pattern.compile("([0-9].*)([A-z].*)");
Matcher matcher = pattern.matcher(pro.toString());
while (matcher.find())
{
System.out.println(matcher.group());
}
for(String s: p)
{
System.out.println(s);
}
System.out.println("End");
输出:
1a1a2aa3aaa4aaaa15aaaaa6aaaaaa
ENd
我甚至尝试使用基于正则表达式的split,但即便如此也是如此。我认为我的正则表达是错误的。我希望输出包含数组中的所有字母。
array[] = {'a', 'a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa'}
答案 0 :(得分:3)
除了字母字符外,您可以使用以下split
(s)的内容。
String s = "1a1a2aa3aaa4aaaa15aaaaa6aaaaaa";
String[] parts = s.split("[^a-zA-Z]+")
for (String m: parts) {
System.out.println(m);
}
使用Matcher
方法,您可以执行以下操作。
String s = "1a1a2aa3aaa4aaaa15aaaaa6aaaaaa";
Pattern p = Pattern.compile("[a-zA-Z]+");
Matcher m = p.matcher(s);
List<String> matches = new ArrayList<String>();
while (m.find()) {
matches.add(m.group());
}
System.out.println(matches); // => [a, a, aa, aaa, aaaa, aaaaa, aaaaaa]
答案 1 :(得分:0)
如果您只想要字母字符,那么使用此表达式会更有意义:/([a-zA-Z]+)/g
使用^
和$
不是您在表达式中可能需要的内容,因为您想要的是匹配所有可能的匹配/g
这是一个在线演示: