Индекс элемента в массиве с использованием подстроки


Мне нужно получить индекс элемента в массиве для поиска:

 String[] items = {"One:10.1.22.33", "Two:10.1.21.23", "Three:10.1.21.33", "Four:10.1.21.23", "Five:10.1.22.23"};
 String q = "Two";  //need to find index of element starting with sub-sting "Two"

Что я пробовал

Try-1

    String temp = "^"+q;    
    System.out.println(Arrays.asList(items).indexOf(temp));

Попробуйте-2

items[i].matches(temp)
for(int i=0;i<items.length;i++) {
    if(items[i].matches(temp)) System.out.println(i);
}

Оба работают не так, как ожидалось.

3 4

3 ответа:

Вам было бы лучше использовать startsWith(String prefix) Вот так:

String[] items = {"One:10.1.22.33", "Two:10.1.21.23", "Three:10.1.21.33", "Four:10.1.21.23", "Five:10.1.22.23"};
String q = "Two";  //need to find index of element starting with substring "Two"
for (int i = 0; i < items.length; i++) {
    if (items[i].startsWith(q)) {
        System.out.println(i);
    }
}

Ваша первая попытка не работает, потому что вы пытаетесь получить индекс строки ^Two внутри вашего списка, но indexOf(String str) не принимает регулярного выражения.

Ваша вторая попытка не работает, потому что matches(String regex) работает на всю строку, а не только на начало.

Если вы используете Java 8, вы можете написать следующий код, который возвращает индекс первого элемента, начинающегося с "Two", или -1, если ничего не найдено.

String[] items = {"One:10.1.22.33", "Two:10.1.21.23", "Three:10.1.21.33", "Four:10.1.21.23", "Five:10.1.22.23"};
String q = "Two";
int index = IntStream.range(0, items.length).filter(i -> items[i].startsWith(q)).findFirst().orElse(-1);

Я думаю, что вам нужно будет реализовать LinearSearch для этого, но с поворотом, вы искали substring. Вы можете попробовать это.

String[] items = {"One:10.1.22.33", "Two:10.1.21.23", "Three:10.1.21.33", "Four:10.1.21.23", "Five:10.1.22.23"};
String q= "Two";  //need to find index of element starting with sub-sting "Two"

for (int i = 0; 0 < items.length; i++) {
    if (items[i].startsWith(q)){
        // item found
        break;
    } else if (i == items.length) {
        // item not found
    }
}
String q= "Five";String pattern = q+"(.*)";
for(int i=0;i<items.length;i++)
{
if(items[i].matches(pattern))
 { 
  System.out.println(i);
 }
}