如何在字符串数组中找到给定String的索引?

时间:2015-11-30 20:09:50

标签: java string equality

当然,解决方法如下:

public long myFunc(String name) throws Exception {
    for(int i=0;i<amount;i++){ 
       if(this.otherString[i].equals(name)) 
           return longArray[i]; 
    } 
    throw new Exception("Not found"); 
} 

然而,情况似乎并非如此。

4 个答案:

答案 0 :(得分:3)

你可以使用Guava,那么你的代码就像这样

String[] stringArray = {"s1", "s2", "s3"};

int index = Iterators.indexOf(Iterators.forArray(stringArray), new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input.equals("s2");
    }
});

或更简单

int index = Arrays.asList(stringArray).indexOf("s2");

您的代码也可能如下所示

public class Finder {

    private String[] stringArray = {"s1", "s2", "s3"};

    public int findIndex(String name) {
        for (int i = 0; i < stringArray.length; i++) {
            if (stringArray[i].equals(name))
                return i;
        }

        throw new RuntimeException("Not found");
    }

    public static void main(String... s) {
        int index = new Finder().findIndex("s1");

        System.out.println(index);
    }
}

答案 1 :(得分:0)

您可以通过调试器运行代码并找出它无法正常工作的原因,或者在原始代码中添加一些println跟踪,然后您就会看到问题所在:

public long myFunc(String name) throws Exception {
    System.out.println("Looking for: " + name);
    for (int i = 0; i < amount; i++){
        if(this.otherString[i].equals(name))
            return longArray[i];
        System.out.printf("%4d: \"%s\": No match.%n", i, this.otherString[i]);
    }
    for (int i = amount; i < this.otherString.length; i++)
        System.out.printf("%4d: \"%s\": Not checked.%n", i, this.otherString[i]);
    throw new Exception("Not found");
}

顺便说一下,确保正确解释方法的行为。是不是因为它找到了它但抛出了一个ArrayIndexOutOfBoundsException,因为i大于longArray.length,你误解为你明确抛出的异常?

答案 2 :(得分:0)

结果'\ u0000'位于字符串末尾,意思是相同的。这不会在打印中显示。下次我会在检查调试时更加无情。谢谢你提出的所有建议,抱歉浪费你的时间。

答案 3 :(得分:-2)

这可能是完全错误的,但问题只是在if语句中缺少大括号?我是java语言的新手,这个例子可能很乱,但它在你的问题中使用了相同的结构并且运行得很好:

public class random_class {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String[] a = new String[] {"hi!", "hello world!", "ho ho ho world!"};       
    int b = getHWIndex(a);
    System.out.println(b);
}

public static int getHWIndex(String[] stringArray){
    int i;
    Boolean test = false;
    for(i=0;i<stringArray.length;i++){
        if(stringArray[i].equals("hello world!")){
            test = true;  
            break;
        }
    }
    if(test == true){
    return i;}else{
        return i = 0; // this is not a good answer... 
//but as you return an int I could not think on a quick way to fix   the return when there is no match.
        }
    }
}