获取列表项的索引

时间:2016-04-07 11:50:08

标签: java list

我有一个字符串列表,我需要输出它的索引:

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());
    }

3 个答案:

答案 0 :(得分:4)

索引以 0 开头,而不是 1 。所以你需要更改这一行:

&#xA;&#xA;
  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;

所以你需要将行改为:

&#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(", "));
相关问题