我正在使用此代码来获取数组中字符串的索引。
int n = Arrays.asList(Names).indexOf(textBox.getText());
这里的问题是,如果textBox中的 String 与 Array 中的类似 String 的大小写不同。它返回-1。在字符串比较的情况下,如何使其类似于equalsIgnoreCase。
谢谢你
您可以使用 Collator 类。在这里,您可以设置不同的级别进行比较。您可以忽略大小写,并设置一些特定的语言字符。例如,在德语中,它可以设置 ß 等于 ss。
这是一些纪录片:Collator 类
编辑:这是给你的示例代码
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;
}
您可以使用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());
}
}
一种不同的方法,在内部确保忽略大小写。
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());
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());