0

ArrayListから特定の文字列のindexOfを取得しようとしていますが、チェックを行ったときに文字列が一致していません。ハッシュテーブルのStringListに以下のコードを入力しています。

stringList = new ArrayList<String>

Set st = hashtable.keySet();
Iterator itr = st.iterator();
while(itr.hasNext())
{
  stringList.add(((String)itr.next()).trim());
}

stringListから取得しようとしている文字列は、ユーザーが入力したものです。文字列は通常、「!Xxxx ##:##:##xx」それが違いを生む場合。stringListを出力して視覚的にテストしているので、文字列が一致していることがわかります。だから私はそれが==と.equals()に似ていると思います。

また、stringListにハッシュテーブルの特定の文字列を入力し、以下のコードを使用してテストしましたが、常にfalseが返されます。

String keyString = "! Xxxx ##:##:## xx";
if(stringList.get(0).equals(keyString))
   System.out.println("true");
System.out.println("false");

だから私は以下のコードを機能させる方法を理解しようとしています

stringList.indexOf(keyString)

文字列が等しいとは見なされないため、必要な-1のみが返されるためです。私が間違っているのは、探している出力を妨げていることです。これは、stringListによって出力されているものを正確に入力しているため、返されるはずの正しいインデックスになります。前に言ったように、これは.equals()の問題だと思いましたが、indexOfは、インデックスを探すときに.equals()を使用し、自分で.equals()をテストした結果を確認しました。

4

3 に答える 3

2

stringList を印刷して視覚的にテストするという事実で、文字列の一致を知っています。

それがおそらく問題です。文字列が実際には等しくない微妙な方法がすべて存在する可能性があり、それらは簡単な検査では表示されません。たとえば、末尾に Unicode NULL 文字 (U+0000) がある場合、それらはおそらく表示されず、他の非印刷文字もあります。

文字列の長さと内容を繰り返しstringList出力してから、長さも出力することをお勧めします。keyString

また、次のコードにも注意してください。

String keyString = "! Xxxx ##:##:## xx";
if(stringList.get(0).equals(keyString))
   System.out.println("true");
System.out.println("false");

...常に印刷されますfalse(例外がない場合)。もちろん、印刷することもできますが、無条件に印刷していることになります。次のように書く方がはるかに簡単です。truefalse

String keyString = "! Xxxx ##:##:## xx";
System.out.println(stringList.get(0).equals(keyString));
于 2012-12-08T09:12:01.360 に答える
2

Jon が言うように、おそらく 2 つの文字列の実際の文字には違いがあり、それは視覚的には見えません。

問題がどこにあるかを知るために、次のメソッドに等しいはずの 2 つの文字列を渡します。

public void dumpString(String s) {
    System.out.println("String: " + s);
    System.out.println("Length: " + s.length());
    System.out.print("Chars: ");
    for (int i = 0; i < s.length(); i++) {
        System.out.print((int) s.charAt(i));
        System.out.print(' ');
    }
    System.out.println();
}
于 2012-12-08T09:19:11.113 に答える
1

stung リストに追加する文字列はトリミングされるため、末尾または先頭のスペースはすべて削除されます。最初の文字列にスペースが含まれている場合、それが問題になる可能性があります。.trim() を削除してみて、それが役立つかどうかを確認してください。

于 2012-12-08T09:11:43.397 に答える