【问题标题】:How to find index of STRING array in Java from a given value?如何从给定值中查找 Java 中 STRING 数组的索引?
【发布时间】:2014-06-03 08:37:31
【问题描述】:

我想知道数组中是否有 Java 的本地方法来获取给定值的表索引?

假设我的表包含这些字符串:

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

假设用户必须输入汽车的类型,然后程序在后台获取该字符串并获取它在数组中的位置。

所以如果这个人进入:轿车 它应该占据位置 0 并将其存储在我的程序创建的 Cars 对象中......

【问题讨论】:

标签: java arrays string position


【解决方案1】:

重构以上方法并随用展示:

private String[] languages = {"pt", "en", "es"};
private Integer indexOf(String[] arr, String str){
   for (int i = 0; i < arr.length; i++)
      if(arr[i].equals(str)) return i;
   return -1;
}
indexOf(languages, "en")

【讨论】:

    【解决方案2】:

    输入:

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

    【讨论】:

    • 这使用 Arrays 类将 TYPES 数组转换为 List 对象。 List 类有一个方法(.indexOf),它将返回传入对象(在本例中为字符串)的索引。如果您不介意从数组中创建 List ,这是一个不错的解决方案。 +1
    • 该数组被转换为一个列表,它在移动设备上消耗 cpu 和电池,但它会正常运行。
    • 很好,但你应该评论必须导入 java.util.Arrays
    • @GaryDavies 如果您关心在 java 中创建对象/列表,那么您的语言是错误的......
    【解决方案3】:

    没有内置方法。但您可以轻松实现:

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

    【讨论】:

      【解决方案4】:

      我有一个包含所有英语单词的数组。我的阵列有独特的项目。但是使用...

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

      ...总是给我indexOutOfBoundException

      所以,我尝试了:

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

      而且,它奏效了。如果您的数组没有两次相同的项目,您可以使用:

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

      【讨论】:

        【解决方案5】:

        将此用作 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;
        }
        

        【讨论】:

          【解决方案6】:

          java 数组中没有原生 indexof 方法。您需要为此编写自己的方法。

          【讨论】:

            【解决方案7】:

            可测试的可模拟接口

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

            【讨论】:

              【解决方案8】:

              试试这个

              org.apache.commons.lang.ArrayUtils.indexOf(array, value);
              

              【讨论】:

                【解决方案9】:

                使用Arrays 类来做到这一点

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

                【讨论】:

                • 不能对TYPES进行排序,因为它是final
                • OP 想知道字符串在列表中的原始顺序的索引。对它进行排序后,您可能会返回与原来不同的索引。
                • 也关于“最终”。标准 java 数组是可变的,无论它们是否被声明为 final。 Final 只是意味着 TYPES 变量不能有另一个对象分配给它。 Guava 有一些不可变的集合,如果您有兴趣,可能值得研究一下。
                【解决方案10】:

                一种简单的方法是循环遍历数组中的项目。

                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,但几乎所有编程语言都应该使用相同的方法。

                【讨论】:

                  【解决方案11】:

                  试试这个功能:

                  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
                        }
                  

                  【讨论】:

                    【解决方案12】:
                    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);
                    

                    【讨论】:

                      【解决方案13】:
                      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。

                      【讨论】:

                        猜你喜欢
                        • 2019-12-07
                        • 2014-09-20
                        • 1970-01-01
                        • 2013-11-02
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多