2016-12-21 77 views
0

如何找到一個數組列表 前的第n個指數:我HV一個List<Character> charList = new ArrayList<Character>(Arrays.asList('s', 'h','a','r','a','n'))如何找到一個ArrayList中的第n個指標

charList.indexOf('a'); 

總是給人a第一指數。 如何獲得第n個?

+0

使用'lastIndexOf( 'A')'.. – Jobin

+2

聲音像[XY問題](http://xyproblem.info/)。爲什麼要將字符存儲在'List'而不是'String'中?爲什麼你需要訪問char的第n個索引? – Spotted

+0

謝謝你讓我知道XY問題,聽起來很有趣。是的,當然我沒有給出的背景抱歉,問題是要找到任何元素的第n個索引,在我的情況下恰好是字符..如何找到列表的給定字符串的第n個索引stringList – Sharan

回答

1

的indexOf()的ArrayList中的實現:

public int indexOf(Object o) { 
     if (o == null) { 
      for (int i = 0; i < size; i++) 
       if (elementData[i]==null) 
        return i; 
     } else { 
      for (int i = 0; i < size; i++) 
       if (o.equals(elementData[i])) 
        return i; 
     } 
     return -1; 
    } 

所以,你可以嘗試榜單:

public int indexNth(List charList, int n, Object _enum) { 
     int index = 0; 
     int findTimes = 0; 
     if (n == 0) 
      return -1; 
     if (CollectionUtils.isEmpty(charList)) 
      return -1; 
     for (Object o : charList) { 
      if (o.equals(_enum)) 
       findTimes++; 
      if (findTimes >= n) 
       return index; 
      index++; 
     } 
     return -1; 
    } 
0

indexOf('a')返回列表中第一個'a'元素的索引。

爲了找到一些第n個「一」索引,則需要通過列表進行迭代:

int count = 0; 
int index = -1; 
for (int i = 0; i < charList.size(); i++) { 
    if charList[i].equals('a') { 
     count++; 
    } 
    if (count == 2) { 
     index = i; 
     break; 
    } 
} 

我假設你正在尋找第二個「一」。

+0

也許他想要得到第二個a的索引。現在你會說使用lastindexof。但如果有3個呢?你如何獲得第二高效? – XtremeBaumer

+0

爲什麼人們想要在數組中找到'x'的位置有無數的原因。由於Java的'.contains(Object o)'和'.indexOf(Object o)'都使用Object的'.equals(Object o)'(因爲它們應該),所以人們可以很容易地根據該對象的某些屬性在數組中找到用戶定義的對象。我無法告訴你我使用這個功能的次數。這絕不是無用的....在多維數組和並行數組的情況下尤其如此。 – CraigR8806

+0

對不起,我編輯了答案。感謝您的意見。 – Nurjan

0

我將創建一個方法吧,這樣的事情:

public static <T> int indexOfNth(List<T> list, T find, int nthOccurrence) { 
    if (list == null || list.isEmpty()) return -1; 
    int hitCount = 0; 
    for (int index = 0; index < list.size(); index++) { 
     if (list.get(index).equals(find)) { 
      hitCount++; 
     } 
     if (hitCount == nthOccurrence) return index; 
    } 
    return -1; 
} 
+0

工程就像一個魅力..;) – Sharan

+0

然後接受爲答案,如果你最終使用它:) –

0

以下代碼片斷將從arraylist中返回所需字符的位置。

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Iterator; 


class Test4 
{ 

    public static int find(ArrayList<Character> obj,int index,char value) 
    { 

     int counter=0; 
     for(int i=0;i<obj.size();i++) 
     { 

      if(obj.get(i)==value) 
      { 
       counter++; 
       if(counter==index) 
       { 
        return i+1; 
       } 
      } 
     } 
      return -1; 

    } 

    public static void main(String[] args) { 

     ArrayList<Character> charList = new ArrayList<Character>(Arrays.asList('s', 'h','a','r','a','n')); 


    // The following parameters to method find are as find the position of second character 'a' in the ArrayList 

     System.out.println(find(charList,2,'a')); 

    } 

} 

如果該字符不存在,它將返回-1。

1

這裏的一個爪哇8基於流的方法:

List<Character> charList = new ArrayList<>(Arrays.asList('s', 'h','a','r','a','n')); 

    int[] allIndexes = IntStream.range(0, charList.size()) 
           .filter(i -> charList.get(i).equals('a')) 
           .toArray(); 

    System.out.println(Arrays.toString(allIndexes)); 

此搜索輸入數組爲等於所需的元素'a'的所有元素,並返回包含匹配元素的索引的數組。如果N小於allIndexes.length,則第N次出現在allIndexes[N],否則不存在第N次出現。 (這裏假定N是從零開始的,就像陣列和列表索引是Java。)

在這種情況下,結果是

[2, 4] 
相關問題