【问题标题】:Find substring in List and return Index Number在 List 中查找子字符串并返回索引号
【发布时间】:2013-04-23 08:37:05
【问题描述】:

我有一个列表,字符串如下:

String One
String Two
String Three

现在我想获取子字符串“One”的索引号。我怎样才能得到这个? 如果我将它转换为数组,我只能做到:

public static int findInArray(Object[] arr, String searchName) {
int i;
for (i=0; i<arr.length; i++ ) { 
    String test = arr[i].toString();
    if (test.contains(searchName)) {
        //System.out.println("Substring found in:"+i);
        break;
    }
}
return i;
}

有没有办法在不将其转换为数组的情况下搜索子字符串?

【问题讨论】:

  • 这里可以用List代替数组。
  • 您应该考虑的另一件事是如何表达您的包含检查。从上面的示例继续,如果您有一个包含元素 ["String Twenty-One", "String Two", "String Three"] 的列表,您的代码将在索引 0 中找到子字符串 "One",这可能不是你想要什么。这可能是一个人为的例子,但这一点仍然成立。
  • @AndreaLigios 我也看到了你链接的这个问题,但没有我正在寻找的答案。
  • 有三个有趣的答案:您可以创建自己的 ArrayList 实现,或者您可以在插入值时“标记”您的值,或者您可以使用 KMP 搜索应用于循环元素。或者您可以在此处接受的答案中这样做:)

标签: java arrays list substring


【解决方案1】:

列表已经包含索引

 for(int i=0;i<list.size();++i){
     if (list.get(i).contains("searchString")) {
         System.out.println("Substring found in:"+i);
     }
 }

【讨论】:

    【解决方案2】:
    public static int find(List<String> list, String searchString) {
        for(int i=0 ; i < list.size() ; ++i){
            if (list.get(i).contains(searchString)) {
                return i;
            }
        }
        return -1;
    }
    

    【讨论】:

      【解决方案3】:

      试试这个方法,可以得到它的索引,或者返回-1表示未找到。

      public static int findInList(List<String> list, String searchName) {
          for(String str : list){
              if(str.indexOf(searchName) > -1){
                //System.out.println("Substring found in:"+i);
                    return list.indexOf(str);
              }
          }
          return -1;
      }
      

      【讨论】:

      • 这与下面的答案相同,但更糟糕的是:在进行可爱的 for-each 迭代时,您会无缘无故地强制执行额外昂贵的“indexOf”
      • @iluxa String.contains(CharSequence) 实际上也调用了 String.indexOf(String)。
      • str.indexOf() 很好。我说的是你正在使用的 list.indexOf()。
      • @iluxa 我明白了你的意思,也许下次我在发布代码时需要考虑更多关于性能问题。
      猜你喜欢
      • 2014-03-17
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多