Индекс элемента в массиве с использованием подстроки
Мне нужно получить индекс элемента в массиве для поиска:
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 ответа:
Вам было бы лучше использовать
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 } }