5

我正在使用此代码来获取数组中字符串的索引。

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

这里的问题是,如果textBox中的 String 与 Array 中的类似 String 的大小写不同。它返回-1。在字符串比较的情况下,如何使其类似于equalsIgnoreCase

谢谢你

4

4 回答 4

3

您可以使用 Collat​​or 类。在这里,您可以设置不同的级别进行比较。您可以忽略大小写,并设置一些特定的语言字符。例如,在德语中,它可以设置 ß 等于 ss。

这是一些纪录片:Collat​​or

编辑:这是给你的示例代码

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;
}
于 2012-12-11T09:48:30.413 回答
3

您可以使用Apache 公共库的StringUtils类,或者如果您不想下载该库,请查看源代码以了解创建方法的逻辑。使用 StringUtils的stackoverflow链接

如果你想从字符串数组中找到字符串的索引,那么还有另一个库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());
}
}
于 2012-12-11T10:06:18.660 回答
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());
于 2012-12-11T09:44:42.110 回答
0

ArrayList你可以这样扩展

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

最终 :

int n = new StringArrayList(Arrays.asList(Names)).indexOf(textBox.getText());
于 2012-12-11T10:19:33.610 回答