Java indexOf和lastIndexOf返回-1 ??请帮忙

时间:2010-10-28 23:05:58

标签: java

在下面的代码中,我试图检查int(转换为String)是否包含重复的数字。

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

2 个答案:

答案 0 :(得分:5)

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;

答案 1 :(得分:2)

这可能是因为您使用int参数调用indexOf,但它正在查找具有该unicode值的字符,而不是字符串值。将数字转换为字符串,如下所示:

while(digit < 10)
    {
      String digitString = String.valueOf(digit);
      if(number.indexOf(digitString) != number.lastIndexOf(digitString))
      {
      ...