我正在使用此代码来获取数组中String的索引。
int n = Arrays.asList(Names).indexOf(textBox.getText());
这里的问题是,如果 textBox 中的String与 case 中的String与Array中类似的String不同。它返回 -1 。在String比较的情况下,如何使它成为 equalsIgnoreCase 。
谢谢
答案 0 :(得分:3)
您可以使用Collator类。在这里,您可以设置不同的级别进行比较。 你可以忽略大小写,并设置一些特定的语言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());