web-dev-qa-db-ja.com

特定の値からJavaのSTRING配列のインデックスを見つける方法は?

特定の値のテーブルのインデックスを取得するためのJavaの配列にネイティブメソッドがあるかどうかを知りたいですか?

私のテーブルにこれらの文字列が含まれているとしましょう:

public static final String[] TYPES = {
        "Sedan",
        "Compact",
        "Roadster",
        "Minivan",
        "SUV",
        "Convertible",
        "Cargo",
        "Others"
    };

ユーザーが車のタイプを入力する必要があり、バックグラウンドでプログラムがその文字列を取得し、配列内の位置を取得するとします。

だから人が入った場合:セダンそれは位置0を取り、私のプログラムによって作成された車のオブジェクトに格納する必要があります...

43
Cyberflow
String carName = // insert code here
int index = -1;
for (int i=0;i<TYPES.length;i++) {
    if (TYPES[i].equals(carName)) {
        index = i;
        break;
    }
}

この後indexは車の配列インデックス、または存在しない場合は-1です。

27
Anubian Noob

入力する:

Arrays.asList(TYPES).indexOf("Sedan");
145
user3539787

すべての英語の単語の配列がありました。私の配列にはユニークなアイテムがあります。でも…

Arrays.asList(TYPES).indexOf(myString);

…常にindexOutOfBoundExceptionをくれました。

だから、私は試しました:

Arrays.asList(TYPES).lastIndexOf(myString);

そして、それは働いた。配列に同じアイテムが2回ない場合は、次を使用できます。

Arrays.asList(TYPES).lastIndexOf(myString);
9
suhid
for (int i = 0; i < Types.length; i++) {
    if(TYPES[i].equals(userString)){
        return i;
    }
}
return -1;//not found

これもできます:

return Arrays.asList(Types).indexOf(userSTring);
8
mok

代わりにこれを試してください

org.Apache.commons.lang.ArrayUtils.indexOf(array, value);
6
Wayne Wang

これを行うにはArraysクラスを使用します

Arrays.sort(TYPES);
int index = Arrays.binarySearch(TYPES, "Sedan");
6
Arjit

組み込みメソッドはありません。ただし、簡単に実装できます。

public static int getIndexOf(String[] strings, String item) {
    for (int i = 0; i < strings.length; i++) {
        if (item.equals(strings[i])) return i;
    }
    return -1;
}
3
Raphael C

Java配列にはネイティブのindexofメソッドはありません。このために独自のメソッドを記述する必要があります。

2
abhishek58g

この機能を試してください:

public int indexOfArray(String input){
     for(int i=0;i<TYPES,length();i++)
       {
         if(TYPES[i].equals(input))
         {
          return i ;
         }
        }
      return -1     // if the text not found the function return -1
      }
1
Alaeddine

テスト可能なモック可能なインターフェイス

public interface IArrayUtility<T> {

    int find(T[] list, T item);

}

実装

public class ArrayUtility<T> implements IArrayUtility<T> {

    @Override
    public int find(T[] array, T search) {
        if(array == null || array.length == 0 || search == null) {
            return -1;
        }

        int position = 0;

        for(T item : array) {

            if(item.equals(search)) {
                return position;
            } else {
                ++position;
            }
        }

        return -1;
    }

}

テスト

@Test
public void testArrayUtilityFindForExistentItemReturnsPosition() {
    // Arrange
    String search = "bus";
    String[] array = {"car", search, "motorbike"};

    // Act
    int position = arrayUtility.find(array, search);

    // Assert
    Assert.assertEquals(position, 1);
}
0
Gary Davies

最初はxを任意の数にしてメソッドとして使用します。コンソールによって渡される文字列yとvは検索する配列です!

public static int getIndex(int x, String y, String[]v){
    for(int m = 0; m < v.length; m++){
        if (v[m].equalsIgnoreCase(y)){
            x = m;
        }
    }
    return x;
}
0

簡単な方法は、配列内の項目をループで繰り返すことです。

for (var i = 0; i < arrayLength; i++) {
 // (string) Compare the given string with myArray[i]
 // if it matches store/save i and exit the loop.
}

間違いなくより良い方法がありますが、少数のアイテムの場合、これは非常に高速です。ところでこれはjavascriptですが、ほぼすべてのプログラミング言語で同じメソッドが機能するはずです。

0
R.W