我是一名学习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)))
{
...
}
...
}
我在我的代码中多次使用此方法,因此确切的替换会很好。
提前谢谢大家!
答案 0 :(得分:1)
了解如何将String拆分为String数组。所以:
String[] splitStrings = myString.split(",")
ArrayList<Integer> parsedInts = new ArrayList<Integer>();
for (String str : splitStrings) {
parsedInts.add(Integer.parseInt(str));
}
然后在你的for循环中:
if (parsedInts.contains(i)) {
// body
}
答案 1 :(得分:1)
您只需要调用matches()
的方法:
if (myString.matches(".*\\b" + anInteger + "\\b.*"))
// string contains the number
这可以通过创建在目标数字的任一端具有单词边界(\b
)的正则表达式来使用。前导.*
是必需的,因为matches()
必须与整个字符串匹配才能返回true。
答案 2 :(得分:0)
这样的事情:
String myString = "0,1,2,10,14,";
String[] split = myString.split(",");
for (String string : split) {
int num = Integer.parseInt(string);
if (num == 4) {
System.out.println(num);
// ...
}
}
答案 3 :(得分:0)
String myString = "0,1,2,10,14,2323232";
String[] allList = myString.split(",");
for (String string : allList) {
if(string.matches("[0-9]*"))
{
System.out.println("Its number with value "+string);
}
}
答案 4 :(得分:0)
我认为您需要选择给定字符串中的所有数字并找到排列。
我认为您需要使用逗号分隔符对给定字符串进行标记 当我执行这样的程序时,我将我的逻辑划分为解析String并在另一个方法中编写逻辑。以下是摘录
String myString = "0,1,2,10,14,";
StringTokenizer st2 = new StringTokenizer(myString , ",");
while (st2.hasMoreElements()) {
doSomething(st2.nextElement());
}