5

このコードを使用して、配列内の文字列のインデックスを取得しています。

int n = Arrays.asList(Names).indexOf(textBox.getText());

ここでの問題は、textBox内の文字列が、配列内の同様の文字列と異なる場合です。-1を返します。文字列比較の場合、equalsIgnoreCaseのようにするにはどうすればよいですか。

ありがとうございました

4

4 に答える 4

3

Collat​​or クラスを使用できます。ここで、比較のためにさまざまなレベルを設定できます。大文字と小文字を無視して、特定の言語文字を設定できます。たとえばドイツ語では、ß を ss に等しく設定できます。

ここにいくつかのドキュメンタリーがあります:コレーター クラス

編集:ここにコードの例があります

private int indexOf(String[] original, String search) {
    Collator collator = Collator.getInstance(); 
    collator.setStrength(Collator.SECONDARY);
    for(int i = 0;i<original.length;++i) {
        if(collator.equals(search, original[i]))
            return i;
    }
    return -1;
}
于 2012-12-11T09:48:30.413 に答える
3

Apache Commons ライブラリのStringUtilsクラスまたはこれを使用できます。ライブラリをダウンロードしたくない場合は、メソッドを作成するロジックのソース コードを参照してください。StringUtils を使用するためのstackoverflowリンク

文字列の配列から文字列のインデックスを見つけたい場合は、メソッドindexOfを持つ別のライブラリArrayUtilsがあります

これがindexOfの実装です

 public static int indexOf(Object[] array, Object objectToFind, int startIndex) {
        if (array == null) {
            return INDEX_NOT_FOUND;
        }
        if (startIndex < 0) {
            startIndex = 0;
        }
        if (objectToFind == null) {
            for (int i = startIndex; i < array.length; i++) {
                if (array[i] == null) {
                    return i;
                }
            }
        } else {
            for (int i = startIndex; i < array.length; i++) {
                if (objectToFind.equals(array[i])) {
                    return i;
                }
            }
        }
        return INDEX_NOT_FOUND;
    }

.equals() を使用していることがわかるので、次のことをお勧めします

1) カスタム文字列クラスを作成する

2) 配列に追加する

3) .equals メソッドを次のようにオーバーライドします

class StringCustom
{
String string;
//implement getters and setters
public String equals(Object o)
{
return this.getString().equalsIgnoreCase(((String)o).getString());
}
}
于 2012-12-11T10:06:18.660 に答える
1

内部的に大文字と小文字を区別しないようにする別のアプローチ。

public static int indexOfIgnoreCase(String[] strs, String text){

   int n = strs.length;
   for(int i=0;i<n;i++){
       if(strs[i].equalsIgnoreCase(text))
         return i;
   }
   return -1;
}
int n = indexOfIgnoreCase(Names,textBox.getText());
于 2012-12-11T09:44:42.110 に答える
0

ArrayListこのように伸ばすことができます

    public class StringArrayList extends ArrayList<String> {
        @Override
        public boolean contains(Object o) {
            String paramStr = (String)o;
            for (String s : this) {
                if (paramStr.equalsIgnoreCase(s)) return true;
            }
            return false;
        }

        public int indexOf(Object o) {
            String paramStr = (String)o;
            int index = 0;
            for (String s : this) {
                if (paramStr.equalsIgnoreCase(s)) return index;
                index++;
            }
            return -1;
        }
    }

最終的 :

int n = new StringArrayList(Arrays.asList(Names)).indexOf(textBox.getText());
于 2012-12-11T10:19:33.610 に答える