【发布时间】:2016-05-20 14:55:59
【问题描述】:
我正在尝试编写一个代码,该代码返回一个数组,其元素是我在字符串中查找的单词(出现)的索引: 前任) d 输入:
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
如果Java有像python这样的字符串切片功能会非常好。但是因为它没有。我尝试使用substring()方法。
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
事后看来,我每次迭代都会发送原始字符串的子字符串,因此索引数组中的元素是 发送的字符串的子字符串中的 字符串查找的索引> 分别是 0、4、4。
如何解决此问题以获得所需的输出? 任何帮助表示赞赏!
【问题讨论】:
-
附注:您可以直接调用
indexOf()并检查返回值是否小于0,在这种情况下找不到搜索字符串,而不是调用sent.contains(find)。 -
是的,我将 if 语句更改为 if(sent.indexOf(find)==-1)。谢谢
-
我感觉你误解了我:不要只用
indexOf() == -1替换contains(),而是只调用indexOf()一次 并检查索引。我的意思是(伪代码)index = indexOf(whatever); if( index >= 0 ) { add( index); }.
标签: java string recursion slice