这是我的号码“1508261”。 最后我想要一个列表(“15”,“08”,“261”)。 这意味着,该模式应始终创建两个新数字,每个数字各有两位数字,其余数字应全部包含在最后一个(第三个)数字中。
我尝试使用这种方法,但它返回(“1508261”):
Pattern pattern = Pattern.compile("([0-9]{2})([0-9]{2})([0-9]{1,})");
Matcher matcher = pattern.matcher("1508261");
ArrayList<String> list = new ArrayList<String>();
while (matcher.find()) {
list.add(matcher.group());
}
最佳答案
您的代码片段针对输入字符串测试整个模式,而不是单独测试每个组。您可能想使用 Matcher.matches()
和 Matcher.group(int)
而不是 Matcher.find()
:
Pattern pattern = Pattern.compile("([0-9]{2})([0-9]{2})([0-9]{1,})");
Matcher matcher = pattern.matcher("1508261");
ArrayList<String> list = new ArrayList<String>();
if(matcher.matches()) {
for(int i = 1;i <= matcher.groupCount();i++)
list.add(matcher.group(i));
}
System.out.println(list);
Ideone 中的实例 here .
另请注意,Matcher.group()
和 Matcher.group(0)
执行相同的工作。更多信息可以在Oracle Java Regex Tutorial中找到.
关于java - 如何在java中使用正则表达式分割一个大数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32235298/