2012-12-11 31 views
5

我正在使用此代碼來獲取數組中的字符串的索引。類似equalsIgnoreCase,而使用indexOf

int n = Arrays.asList(Names).indexOf(textBox.getText()); 

這裏的問題是,如果在的textBox字符串在情況在數組的類似字符串不同。它返回-1。在字符串比較的情況下,如何使它像equalsIgnoreCase

謝謝

回答

1

一種不同的方法,在內部確保忽略大小寫。

public static int indexOfIgnoreCase(String[] strs, String text){ 

    int n = strs.length; 
    for(int i=0;i<n;i++){ 
     if(strs[i].equalsIgnoreCase(text)) 
     return i; 
    } 
    return -1; 
} 
int n = indexOfIgnoreCase(Names,textBox.getText()); 
+0

雖然我將文本框中的字符串更改爲大寫/小寫,我不知道它是如何在給定的數組中。 –

+0

此外,陣列中的字符串被用作AutoCompletes。所以我不能將它們轉換爲大寫/小寫(在下拉菜單中看起來不錯)。可能必須創建一個新的數組,並將所有字符串作爲大寫/小寫。但它不是最好的方法 –

+0

我認爲這會更好,表現會是'O(n)' –

3

您可以使用Collat​​or類。在這裏,您可以爲比較設置不同的級別。 你可以忽略大寫和小寫,並設置一些特定的語言字符。以德語爲例,它可以設定β等於ss。

here's一些紀錄片: Collator class

編輯:here's的示例代碼爲您

private int indexOf(String[] original, String search) { 
    Collator collator = Collator.getInstance(); 
    collator.setStrength(Collator.SECONDARY); 
    for(int i = 0;i<original.length;++i) { 
     if(collator.equals(search, original[i])) 
      return i; 
    } 
    return -1; 
} 
+0

觀看例子,這就是你正在尋找的,我希望 – SomeJavaGuy

+0

所以,現在我真的想出你想要什麼:D你只需要將原始字符串和您在原始字符串中找到的字符串賦予此方法,並且將搜索字符串的索引返回給您,或-1 – SomeJavaGuy

+0

但是,這是爲了獲得給定子字符串的索引父字符串。我的需求是從一個字符串數組中獲取一個字符串的索引。而不改變陣列中字符串的順序。 –

3

您可以使用StringUtils類阿帕奇公共圖書館或this如果你不想下載庫看看source code的邏輯來創建該方法。該stackoverflow鏈接,使用StringUtils的

如果你想從字符串數組找到字符串的指數則有另一個庫ArrayUtils其中有一個方法indexOf

這裏的的indexOf

public static int indexOf(Object[] array, Object objectToFind, int startIndex) { 
     if (array == null) { 
      return INDEX_NOT_FOUND; 
     } 
     if (startIndex < 0) { 
      startIndex = 0; 
     } 
     if (objectToFind == null) { 
      for (int i = startIndex; i < array.length; i++) { 
       if (array[i] == null) { 
        return i; 
       } 
      } 
     } else { 
      for (int i = startIndex; i < array.length; i++) { 
       if (objectToFind.equals(array[i])) { 
        return i; 
       } 
      } 
     } 
     return INDEX_NOT_FOUND; 
    } 

實施因爲你可以看到它使用.equals()我建議你到

1)創建一個自定義字符串類

2)將其添加到陣列

3)重寫.equals方法這樣

class StringCustom 
{ 
String string; 
//implement getters and setters 
public String equals(Object o) 
{ 
return this.getString().equalsIgnoreCase(((String)o).getString()); 
} 
} 
+1

+1的使用庫問題! – itshorty

+0

但是這是得到給定父字符串中子字符串的索引 –

+0

@ Archie.bpgc你還想要什麼? –

0

可以以這種方式

public class StringArrayList extends ArrayList<String> { 
     @Override 
     public boolean contains(Object o) { 
      String paramStr = (String)o; 
      for (String s : this) { 
       if (paramStr.equalsIgnoreCase(s)) return true; 
      } 
      return false; 
     } 

     public int indexOf(Object o) { 
      String paramStr = (String)o; 
      int index = 0; 
      for (String s : this) { 
       if (paramStr.equalsIgnoreCase(s)) return index; 
       index++; 
      } 
      return -1; 
     } 
    } 

最終延伸ArrayList

int n = new StringArrayList(Arrays.asList(Names)).indexOf(textBox.getText());