正则表达式“\\ d +”在字符串中找到两次整数:“{10}”。匹配器匹配10和0

时间:2012-04-22 15:40:31

标签: regex bitset matcher

我使用正则表达式将BitSet normal toString转换为二进制字符串。例如,如果myBitSet.toString()返回{10},它会设置第10位和第0位,但应该只设置第10位。

    ...
    Matcher m = Pattern.compile("(?=(" + "\\d+" + "))").matcher(temp);
    while(m.find()) {
        String test2 = m.group(1);
        answer.setCharAt((2*OpSize -1 - Integer.valueOf(m.group(1))), '1');

    }
    .....

1 个答案:

答案 0 :(得分:6)

您的问题是正则表达式使用lookahead assertion (?=...)找到重叠匹配。在这种情况下,我无法想到你为什么需要它。

尝试删除它;这将确保只找到整个数字。您也不需要捕获组,因为您可以简单地使用.group(0)中的整个匹配:

Matcher m = Pattern.compile("\\d+").matcher(temp);
while(m.find()) {
    String test2 = m.group(0); // why is this here? You're not using it.
    answer.setCharAt((2*OpSize -1 - Integer.valueOf(m.group(0))), '1');
}