试图在数组中查找字符串,但线性/顺序搜索不起作用

时间:2017-04-03 09:33:46

标签: java

下面我有一些代码,它将文本文件中的单独行放入数组中。它要求用户输入一个字符串,然后在数组中查找字符串并查看字符串是否等于数组的元素。如果是这样,它会说并确实说它与哪个元素相等,如果没有,则表示无法找到它。但是,这段代码总是说它无法找到该行,即使我可以清楚地看到输入等于数组中的元素。这里有什么不对?我不知道问题所在,所以下面是创建数组的代码和线性搜索算法:

public static void main(String[] args) throws FileNotFoundException
{ 

File file = new File("text.txt"); //puts separate lines of file into an array
Scanner text = new Scanner(file);
String[] Array = new String[10];

for (int i = 0; i < 10 && text.hasNextLine(); i++) 
{
    String line = text.nextLine();
    if (line.isEmpty()) 
    {
        continue;

    }
    Array[i] = line;
    System.out.printf("Element %d of the array is: %s%n", i, Array[i]);

}


Scanner input = new Scanner(System.in); //performs sequential search based on user input 
System.out.println("Type the line you want to find: ");
String line = input.next();
int pos = 0;
boolean found = false;
while (pos < Array.length && !found)
{
    if(Array[pos]== line)
    {
        found = true;
    }
    else 
    {
        pos++;
    }

}
 if (found)
 {
     System.out.println("Found at position: " + pos); 

 }
 else 
 {
     System.out.println("Could not find " + line); 

 }

}

2 个答案:

答案 0 :(得分:2)

在while循环中,使用equals方法进行字符串比较而不是==

==适用于字符串iff它们都是常量(创建类似"XXX")。如果它们像new String("Test")那样创建,则它们不是常量,所以:

new String("A") == new String("A")会产生 false ,但new String("A").equals(new String("A"))会产生 true

"A" == "A"将生成 true "A".equals("A")将生成 true 以及

答案 1 :(得分:0)

问题可能在于以下代码段:

Array[pos]== line

此处的比较是使用引用而不是String的实际内容完成的。此行为适用于字符串文字和显式实例化(并存储在Java字符串池中)的字符串值。您还可以查看以下链接:https://dzone.com/articles/string-interning-what-why-and

我建议使用String.equals()来比较这些值。希望这会有所帮助。