Я пытаюсь написать код, который возвращает массив, элементы которого являются индексы слова (вхождений), что я ищу в строке: ех) д Входной сигнал:Рекурсивный нахождение индексов строки
String sent = "Hi is Hi is Hi is";
String find = "Hi";
ArrayList<Integer> index = indexFinder(sent,find);
For(int i=0;i<index.size(),i++)
System.out.println(index.get(i));
Выход:
0
6
12
было бы очень хорошо, если бы Ja была функция строки нарезки как питон .. но так как это не .. Я пытался использовать метод подстроки().
import java.util.ArrayList;
public class recursionEx {
ArrayList<Integer> index = new ArrayList<Integer>();
ArrayList<Integer> indexFinder(String sent, String find){
int pos =0;
int subPos =0;
if(sent.contains(find)==false){
return index;
}
else if(sent.contains(find)){
pos = sent.indexOf(find);
index.add(pos);
subPos = pos+find.length();
return indexFinder(sent.substring(subPos),find);
}
return index;
}
public static void main(String[] args) {
String sent = "Hi is Hi is Hi is";
String find = "Hi";
recursionEx r = new recursionEx();
ArrayList<Integer> g = r.indexFinder(sent, find);
for(int i=0;i<g.size();i++){
System.out.println(g.get(i));
}
}
}
выход был
0
4
4
В ретроспективе, я gettng подстроку исходной строки посланной каждую итерацию, таким образом, элементы индекса массива являются индексы Строка поиска в подстроки от Строка отправлена , которые составляют 0,4,4.
Как исправить это, чтобы получить желаемый результат? Любая помощь приветствуется!
Просто побочное замечание: вместо вызова 'sent.contains (найти)' вы могли бы просто назвать 'IndexOf()' и проверьте, является ли возвращаемое значение ниже 0, и в этом случае строка поиска не была найдена. – Thomas
yep, я изменил свой if stat на if (sent.indexOf (find) == - 1). Спасибо – Hello
У меня такое чувство, что вы меня неправильно понимаете: не просто замените 'contains()' на 'indexOf() == -1', а вызовите' indexOf() 'only _once_ и проверьте индекс. Я имею в виду (псевдокод) 'index = indexOf (что угодно); if (index> = 0) {add (index); } '. – Thomas