2017-04-03 12 views
0

以下は、テキストファイルから別の行を配列に入れるコードです。ユーザーに文字列を入力し、続いて配列内の文字列を探し、文字列が配列の要素と等しいかどうかを確認します。そうであれば、それはそうして、どの要素が等しいかを言い、そうでなければそれを見つけることはできないと言います。しかし、このコードでは、入力が配列の要素と同じであることがはっきりとわかるとしても、行が見つからないといっています。ここで間違っているのは何ですか?上==配列内の文字列を検索しようとしましたが、線形/順次検索は機能しません。

==作品の代わりに文字列の比較のために、あなたのwhileループの使用でequals方法を

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); 

} 

} 
+1

[Javaで文字列を比較するにはどうすればよいですか?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Berger

答えて

2

:私はこの問題は、アレイと線形探索アルゴリズムを作成するためのコードをので、下記あるある見当もつかない両方とも定数の場合は文字列("XXX"のように作成されます)。彼らはnew String("Test")ように作成されている場合、それらは、定数はそうではありません。

new String("A") == new String("A")生成されますが、new String("A").equals(new String("A"))が生成されます

"A" == "A""A".equals("A")がaswell

生成されます生成されます
+0

正しいことです。さらに、 "空の" Stringをチェックしようとすると、myStringが本当に空であればエラーを避けるために、<< if( ""。equals(myString))>>のようにequalsの最初の引数に常に ""を使用します。 – Antoine

0

この問題は次のコードスニペットで発生する可能性があります。

Array[pos]== line 

ここでの比較は、文字列の実際の内容ではなく参照を使用して行われます。この動作は、文字列リテラルと文字列値が正しく機能し、明示的にインターンされます(Java文字列プールに格納されます)。次のリンクをチェックアウトすることもできます:https://dzone.com/articles/string-interning-what-why-and

値の比較にはString.equals()を使用することをお勧めします。お役に立てれば。

関連する問題