我的代码看起来像这样,它可以很好地找到矩阵中的所有数字但对我来说似乎过于复杂。
String attr = "matrix(1 0 0 1 22.51 35)";
Pattern nums = Pattern.compile("(-*\\d+(?:\\.\\d+)*)");
Matcher m2 = nums.matcher(attr);
while(m2.find()) {
Log.i(logTag, "s = " + m2.group(0));
}
我想分配一个数组,然后为它赋值,这样我就可以做:
Pattern nums = Pattern.compile("(-*\\d+(?:\\.\\d+)*)");
Matcher m2 = nums.matcher(attr);
String [] matches = new String[number_of_matches];
int index = 0;
while (m2.find()) {
matches[index++] = m2.groups(0);
}
这可能吗?我已经查了好几个小时,在原生java中找不到这样的东西,但是我发现了几个示例代码来实现这个功能但是我希望在regex库中找到它。
在PERL中,我的代码看起来像:
$s = "matrix(1 0 0 1 22.51 35)";
@x = ($s =~ m{(\d+(?:\.\d+)*)}g);
x @x
0 1
1 0
2 0
3 1
4 22.51
5 35
答案 0 :(得分:2)
不,没有该功能的方法。 如果它存在,它将完全按照你描述的方式执行:遍历所有匹配并计算它们(然后重置为字符串的开头)
如果你真的需要事先知道,你可以自己编写计数功能。
但我建议您使用List
(例如ArrayList
)而不是数组;那么你不需要预先知道匹配的数量,List
界面通常使用比数组更方便。
(你的Perl结果还会返回一个可变大小的列表,而不是一个固定大小的数组,如果我的生锈Perl知识没有被误解的话)
答案 1 :(得分:1)
无论如何,您应该使用List
界面进行这些类型的操作。
Pattern nums = Pattern.compile("(-*\\d+(?:\\.\\d+)*)");
Matcher m2 = nums.matcher(attr);
List <String> matches = new ArrayList<String>();
while (m2.find()) {
matches.add(m2.groups(0));
}
答案 2 :(得分:0)
你不能这样做,用find()开始扫描你手头上不太了解的String。只有匹配成功,您才能从文档中了解更多信息
如果匹配成功,则可以通过获得更多信息 开始,结束和分组方法,以及随后的调用 find()方法将从与此不匹配的第一个字符开始 匹配。