我是一名学习Java的计算机科学专业的学生,​​作为一项练习,我们正在做置换算法。

现在,我陷入了需要在一个由数字分隔的,由逗号分隔的字符串中搜索自然数的问题:

String myString = "0,1,2,10,14,";


问题是我正在使用...

myString.contains(String.valueOf(anInteger);


...以检查是否存在特定号码。这适用于从0到9的数字,但是当寻找大于1的数字时,程序不会将其识别为自然数。

换句话说,例如:“ 14”不是整数14,它只是一个带有“ 1”和“ 4”的字符串;所以,如果我跑...

String myString = "0,1,2,10,14,";
if (myString.contains(myString.valueOf(4))) { doSomething(); }


...“ if”语句为true,因为字符串“ 4”作为自然数“ 14”的一部分出现在字符串中。

在这一点上,我一直在搜索StackOverflow和其他页面以寻找解决方案,并了解到我应该使用Pattern和Matcher。

我的问题是:使用它们的最佳方法是什么?

我的代码的相关部分:

for (int i = 0; i<r; i++)
    {
    if (!act.contains(String.valueOf(i)))
        {
        ...
        }
    ...
    }


我在代码中多次使用了此方法,因此完全可以替代。

谢谢大家!

最佳答案

您只需要对matches()的方法调用:

if (myString.matches(".*\\b" + anInteger + "\\b.*"))
    // string contains the number


通过创建在目标编号的任一端都具有单词边界(\b)的正则表达式来使用此功能。前导和尾随的.*是必需的,因为matches()必须与整个字符串匹配才能返回true。

10-06 06:48