Java indexOf和lastIndexOf返回-1 ??请帮忙
问题描述:
在下面的代码中,我试图检查一个int(转换为String)是否包含重复数字。Java indexOf和lastIndexOf返回-1 ??请帮忙
public static boolean hasDupes(int n)
{
String number = new String();
number = Integer.toString(n);
int digit = 0;
System.out.println(num.indexOf(digit));
System.out.println(num.lastIndexOf(digit));
while(digit < 10)
{
if(number.indexOf(digit) != number.lastIndexOf(digit))
{
return true;
}
digit++;
}
//System.out.println(n);
return false;
}
我放在System.out.println
行,因为我不能肯定,为什么我的方法是行不通的。他们总是打印'-1'。我不明白如何索引可以是-1,以及为什么它不工作。
答
number.indexOf(digit)
digit
是int
。传递到indexOf
它将用作字符编号,因此您将查找char 0(空字符)而不是ASCII数字'0'
。当然,该字符不在字符串中,所以你得到-1。
您可能正在考虑indexOf(String)
方法。例如
var dstr= ""+digit;
if (number.indexOf(dstr) != number.lastIndexOf(dstr))
return true;
或者,如果你想与一个范围的字符代码做到这一点:
for (char digit= '0'; digit<='9'; digit++)
if (number.indexOf(digit) != number.lastIndexOf(digit))
return true;
答
这可能是因为您使用int参数调用indexOf,但它正在寻找具有该unicode值的字符,而不是字符串值。转换数字为字符串,像这样:
while(digit < 10)
{
String digitString = String.valueOf(digit);
if(number.indexOf(digitString) != number.lastIndexOf(digitString))
{
...
+0
非常感谢你:) – Deho 2010-11-10 01:12:09
指数-1意味着它不能在字符串中被发现。按照文档... – EboMike 2010-10-28 23:09:01
你的printlns说“num”,但你的字符串被称为“数字”。 – 2010-10-28 23:15:08
我假设有一个拼写错误,因为你初始化'number'并且调用'num'上的方法。哦,永远不要调用String构造函数,这是没用的。只要'String number = Integer.toString(n);'而不是。 – 2010-10-28 23:23:17