gpt4 book ai didi

Java 正则表达式 String.matches 工作不一致

转载 作者:搜寻专家 更新时间:2023-11-01 00:52:12 26 4
gpt4 key购买 nike

我有一个正则表达式来检查一个字符串是否是一个数字。格式的千位分隔符是一个空格,小数分隔符是一个点。小数点后的部分是可选的。

问题是 String.matches() 函数在某些时候会按预期停止工作。以前有效的方法现在不再有效了。

例如JUnit代码:

import junit.framework.Assert;
import org.junit.Test;

public class RegExTest {

@Test
public void testThousandSeperatorRegex()
{
String regEx = "([0-9]{1,3}( [0-9]{3})*(\\.[0-9]+)?|\\.[0-9]+)";
Assert.assertEquals(true, "1".matches(regEx));
Assert.assertEquals(true, "10".matches(regEx));
Assert.assertEquals(true, "100".matches(regEx));
Assert.assertEquals(true, "1 000".matches(regEx));
Assert.assertEquals(true, "10 000".matches(regEx));
Assert.assertEquals(true, "100 000".matches(regEx));
Assert.assertEquals(true, "1 000 000".matches(regEx));
Assert.assertEquals(true, "10 000 000".matches(regEx));
Assert.assertEquals(false, "10000.56".matches(regEx));
Assert.assertEquals(true, "8 734".matches(regEx));
}
}

带有“8 734”的最后一行失败。当我用“1 000”替换它时,它继续失败。最终,同一次运行的相同代码在第 4 行断言中通过,但在最后一行失败(新代码已保存!)。但有时一切都按预期开始工作,直到......再次开始失败。所以我想很难重现我的问题。也许还有其他我做错的事情我没有注意到并因此描述,但我试图让它尽可能简单。这让我很困惑。 String.matches() 有内存还是什么?

会不会是正则表达式有问题?我正在跳过 ^$ 因为 String.matches 无论如何都适用于整个字符串。我尝试了 java.util.regex 和 jregex 包,问题仍然存在。

我正在使用 JDK 6u31。

任何想法表示赞赏。

UPD:好的,在发布这个问题后,代码开始工作并且到目前为止没有失败。也许这是我的问题,但这自上周以来一直困扰着我,我已经能够一次又一次地复制它。我将继续我的代码,如果它能继续工作,我将关闭此问题。此外,我将尝试确定究竟是什么导致了问题。同时,如果有人遇到同样的问题,请分享您的知识。否则,这看起来像是一个知识可以解决的问题,而不是调试。为了避免愚蠢,我可以说我已经编程多年,这是论坛上的第一个帖子:)。到现在为止,我的问题都是通过调试、阅读文档和搜索其他Q的论坛来解决的。

最佳答案

好的,到目前为止我还没有遇到过这个问题。

对于有一天碰巧遇到这种情况的其他人,我只能建议清理您正在工作的环境。这必须对损坏的 JVM 或计算机的内存状态进行处理。

感谢大家的贡献。

关于Java 正则表达式 String.matches 工作不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10126347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com