2017-02-21 9 views
-3

Как получить индекс подстроки в arraylist.Arraylist indexOf и lastIndexOf подстроки

E.g. Список_массивов с этими записями:

[60EBFF0003CF030501CF0304, 60EBFF000104FF210D0301A5, 60EBFF0002020301F9100401, 60EBFF0003CF030501CF0304, 60EBFF000104FF210D0301A5] 

60EBFF0001 всегда то же самое, остальная часть строки является переменной.

indexOf("60EBFF0001") returns -1 и lastIndexOf("60EBFF0001") также возвращает -1, но мне нужно 1 и 3.

Потому что я должен удалить все перед индексом 1 и после того, как индекс 3.

+0

Создание класса и переопределения '' equals' и метод hashCode' может помочь вам здесь вместо того, чтобы работать с простым «String» – SomeJavaGuy

+0

Можете ли вы привести пример? – mosambers

+0

60EBFF0001 - подстрока записи – mosambers

ответ

0

Вы можете, вероятно, расширить ArrayList с чем-то из ваших владеть как:

private class MyArrayList extends ArrayList<String> { 
    @Override 
    public int indexOf(Object o) { 
     int foundAtIndex = -1; 

     for (int index = 0; index < size(); index++) { 
      if (get(index).contains(((String) o))) { 
       foundAtIndex = index; 
       break; 
      } 
     } 

     return foundAtIndex; 
    } 

    @Override 
    public int lastIndexOf(Object o) { 
     int foundAtIndex = -1; 

     for (int index = size() - 1; index >= 0; index--) { 
      if (get(index).contains(((String) o))) { 
       foundAtIndex = index; 
       break; 
      } 
     } 

     return foundAtIndex; 
    } 
} 
0

Когда list ваш ArrayList экземпляр вы можете использовать следующие Java 8 кода для определения первого и последнего индекса элементов, содержащих particul соток подстрока:

IntSummaryStatistics stats = IntStream.range(0, list.size()) 
     .filter(i -> list.get(i).contains("60EBFF0001")) 
     .summaryStatistics(); 
if (stats.getCount() > 0) { 
    System.out.println("First index: " + stats.getMin()); 
    System.out.println("Last index: " + stats.getMax()); 
} else { 
    System.out.println("No match"); 
} 

Кстати, последний индекс элемента, который содержит 60EBFF0001 не 3, а 4.

Смежные вопросы