このコードを使用して、配列内の文字列のインデックスを取得しています。
int n = Arrays.asList(Names).indexOf(textBox.getText());
ここでの問題は、textBox内の文字列が、配列内の同様の文字列と異なる場合です。-1を返します。文字列比較の場合、equalsIgnoreCaseのようにするにはどうすればよいですか。
ありがとうございました
Collator クラスを使用できます。ここで、比較のためにさまざまなレベルを設定できます。大文字と小文字を無視して、特定の言語文字を設定できます。たとえばドイツ語では、ß を 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;
}
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());
}
}
内部的に大文字と小文字を区別しないようにする別のアプローチ。
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());
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());