我有一个字符串列表,我需要输出它的索引:
list.add("I");//1
list.add("have");//2
list.add("an");//3
list.add("apple");//4
list.add("I");//5
list.add("love");//6
list.add("apple");//7
并且输出必须如下:
I: 1, 5
我试过这段代码,但它只显示了第一个索引,就像这个
一样I: 1,1;
我的代码在这里:
StringBuilder sb = new StringBuilder();
String selectableWord = "I";
for (int i = 0; i < word.size(); i++) {
if (selectableWord.equals(word.get(i))){
sb.append(word.indexOf(word.get(i))).append(", ");
}
}
System.out.println(selectableWord + " " + sb.toString());
}
答案 0 :(得分:4)
索引以 0
开头,而不是 1
。所以你需要更改这一行:
sb.append(word.indexOf(word.get(i)))。append(“,”); &#XA; 代码>
&#XA;&#XA; 到
&#XA;&#XA;<代码> sb.append(word.indexOf( word.get(i))+ 1).append(“,”);&#xA;&#xA;&#xA;
此外, indexOf
返回第一个索引。所以,即使你第二次测试“我”,你也会获得第一个索引,即0。
所以你需要将行改为:
&#xA;&#xA; sb.append(i + 1).append(“,”);&#xA;
&#xA;
答案 1 :(得分:1)
您可以更改此行
sb.append(word.indexOf(word.get(i))).append(", ");
到这个
sb.append(i+1).append(", ");
答案 2 :(得分:0)
Collection.index返回第一个索引。如果要从给定点进行搜索以避免重复,则需要提供搜索位置。
StringBuilder sb = new StringBuilder();
String selectableWord = "I";
for (int i = 0; i < word.size(); i++)
if (selectableWord.equals(word.get(i)))
sb.append(word.indexOf(word.get(i), i) + 1).append(", ");
System.out.println(selectableWord + " " + sb.toString());
或者您可以使用索引进行搜索。
for (int i = 0; (i = word.indexOf(selectableWord, i)) >= 0; i++)
sb.append(i + 1).append(", ");
或者你可以使用你已经拥有的索引。
for (int i = 0; i < word.size(); i++)
if (selectableWord.equals(word.get(i)))
sb.append(i + 1).append(", ");
或使用Streams API
String list = IntStream.range(0, words.length())
.filter(i -> words.get(i).equals(selectableWord))
.collect(Collectors.joining(", "));