使用Scanner.nextLine()从输入(键盘)读取

时间:2013-07-07 16:35:24

标签: java search

我正在使用Java实现顺序搜索。 我试图从字符串数组中搜索字符串。使用nextLine()从键盘获取查询。但是,即使字符串明显在列表中,我也总是“找不到”。

/**
   Implementing sequential search
*/
public class SequentialSearch {
    public static boolean sequentialSearch(String[] names, String query) { //static method takes a string array and the query as arguments
        for (String x: names) //traverse the list
            if (x == query) {
                System.out.println("found");
                return true;
            } //end if
        System.out.println("not found"); //end for
        return false;
    } //end method
} //end class

class TestSequentialSearch {
    public static void main (String[] args) {
        String[] names = {"John", "Amy", "Tom", "Jay", "Olivia", "Jack", "Peter", "Emma"}; //a new name list
        Scanner in = new Scanner(System.in);
        String x;
        System.out.println(Arrays.toString(names));
        System.out.println("name to be searched: ");
        while (in.hasNextLine()) {
            x = in.nextLine();
            SequentialSearch.sequentialSearch(names, x); //search input in the list
            System.out.println("name to be searched: ");
        } //end while
    } //end main
} //end test

3 个答案:

答案 0 :(得分:2)

使用equals()方法代替==进行字符串比较。当equals检查字符串内容相等时,==检查对象是否相等。更改代码if条件:

    if (x == query)

if (x.equals(query))

从相关帖子中了解有关equals和==比较字符串之间差异的更多信息:

Java String.equals versus ==

答案 1 :(得分:0)

您需要使用.equals()来比较Java中的字符串,而不是==。这是因为在Java中,字符串是一个对象,而==会比较对象引用 - 所以只有当你有两个指向同一个String对象的变量时才会这样。

另一方面,

.equals()比较对象CONTENT,因此会查看字符串的实际内容,如果它们相等则返回true。

这就是我所指的行:

if (x == query)

答案 2 :(得分:0)

在Java中,对于非基本类型,==运算符会比较引用,而不是值。

如果您创建了一堆等效的字符串文字,例如:

String sLit1 = "test";
String sLit2 = "test";

(sLit1 == sLit2)将为true,因为Java不为每个新的String文字分配新内存,它只是将它们全部指向内存中的相同位置。但是,当您创建String对象时:

String sObj = new String("test") 

它会在内存中占据一个新位置。因此(sLit1 == sObj)始终为false

这意味着当且仅当两个参数引用同一个对象时,==才会生成true。要比较字符串,请使用等于sObj.equals(sLit1)的{​​{1}}中的等号方法。