使用indexOf时的equalsIgnoreCase之类的东西

时间:2012-12-11 09:40:30

标签: java arrays string

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

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

这里的问题是,如果 textBox 中的String与 case 中的String与Array中类似的String不同。它返回 -1 。在String比较的情况下,如何使它成为 equalsIgnoreCase

谢谢

4 个答案:

答案 0 :(得分:3)

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

这是一些纪录片: Collator class

编辑:这是一个代码为您的示例

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

答案 1 :(得分:3)

您可以使用StringUtils类的Apache公共库或this如果您不想下载库,请查看source code以获取用于创建方法的逻辑。使用StringUtils的stackoverflow链接

如果你想从字符串数组中找到String的索引,那么另一个库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());
}
}

答案 2 :(得分: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());

答案 3 :(得分: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());