Java - 测试不起作用的字符串

时间:2016-06-02 15:49:12

标签: java

我有以下代码:

public static void main(String[] args) {

    double start = System.nanoTime();

    String[] test = {"a","n","d"};


    System.out.println(test[0].equals("a"));
    System.out.println(test[1].equals("n"));
    System.out.println(test[2].equals("d"));

    System.out.println(AndTest(test));

    double duration = (System.nanoTime() - start) / 1000000000;
    System.out.println("Your code took " + duration + " seconds to execute.");
}


public static boolean AndTest(String[] n){
    int length = n.length;
    for (int i = 0; i < length-3; i++){
        if (n[i].equals("a") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
        if (n[i].equals("A") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
        if (n[i].equals("A") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
        else continue;
    }
    return false;
}

}

我得到的输出是:

true   //first character is a - tested in main body
true
true
false  // AndTest returns false

为什么会这样?最初,我以为我在比较两个字符串的方法上犯了一个错误,但我上面插入的测试代码似乎返回了正确的输出(true)。

3 个答案:

答案 0 :(得分:2)

for (int i = 0; i < length-3

你的长度应该是3,所以3 - 3一直是0. 0 < 0所以它会自动返回false。使它的长度减去2.或者只是我&lt; 1。

答案 1 :(得分:1)

以下行会导致您的问题。

for (int i = 0; i < length - 3; i++) {
/* 
    length = 3, 
    length - 3 == 0, 
    0 < 0 == false, 
    the `for` statement doesn't execute
    the method returns `false` 
*/

答案 2 :(得分:1)

  

为什么会这样?最初,我认为我在比较两个字符串的方法上犯了一个错误,但我上面插入的测试代码似乎返回了正确的输出(true)。

这是因为您正在执行length-3并且在您的情况下这是0,因此for循环始终会返回false您的最后一行return false;所以请确保这个长度很小。

我已将您的for loop更改为:

public static boolean AndTest(String[] n){
    int length = n.length;
    for (int i = 0; i < length; i++){
        if (n[i].equals("a") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
        if (n[i].equals("A") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
        if (n[i].equals("A") && n[i+1].equals("n") && n[i+2].equals("d")) return true;
        else continue;
    }
    return false;
}

输出

  

     

     

     

     

您的代码需要7.59064E-4秒才能执行。

我不知道你究竟想要什么,也许只是寻求效率,但这样做的时间更短。