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,以及为什么它不工作。

+4

指数-1意味着它不能在字符串中被发现。按照文档... – EboMike 2010-10-28 23:09:01

+0

你的printlns说“num”,但你的字符串被称为“数字”。 – 2010-10-28 23:15:08

+0

我假设有一个拼写错误,因为你初始化'number'并且调用'num'上的方法。哦,永远不要调用String构造函数,这是没用的。只要'String number = Integer.toString(n);'而不是。 – 2010-10-28 23:23:17

number.indexOf(digit) 

digitint。传递到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