我正在尝试遍历EditText“name”并检查字母,以便查看它们是否与数组uNamesList对象中的任何字母匹配。 如果他们这样做,我想打破循环并返回具有匹配字母的对象的位置。目前我收到此错误,任何人都知道可能出现的问题?
java.lang.StringIndexOutOfBoundsException: length=9; index=9
uNamesList.add("bob");
uNamesList.add("mike");
uNamesList.add("sike");
uNamesList.add("othername");
uNamesList.add("name");
public int getName(EditText name) {
String text = name.getText().toString();
for (int i = 0; i < text.length(); i++) { //i = current letter in text
char cLetter = name.toString().charAt(i);
for (int o = 0; o < uNamesList.size(); o++) {
String uName = (String)uNamesList.get(o);
char uLetter = uName.charAt(i);
if (cLetter == uLetter) {
match = o;
break;
}
}
}
return match;
}
答案 0 :(得分:0)
您以错误的方式获取编辑文本中的文本。它应该:
public int getName(EditText name) {
String text = name.getText(); //get the text
int match = 10;
for (int i = 0; i < text.toString().length(); i++) { //get the length of the text
for (int o = 0; o < uNamesList.size(); o++) {
char cLetter = name.toString().charAt(i);
String uName = (String)uNamesList.get(o);
好的,这是另一个问题的编辑。我不知道这是不是你想要的。
public int getName(EditText name) {
int match = 9999;
String text = name.getText().toString();
boolean found = false;
for (int i = 0; i < text.length(); i++) { //i = current letter in text
char cLetter = name.toString().charAt(i);
for (int o = 0; o < uNamesList.size(); o++) {
String uName = (String)uNamesList.get(o);
char uLetter = uName.charAt(i);
if (cLetter == uLetter) {
match = o;
found = true;
break;
}
}
if(found) break;
}
return match;
}
最简单的方法就是只有在找到时才会调用return。
public int getName(EditText name) {
int match = 9999;
String text = name.getText().toString();
for (int i = 0; i < text.length(); i++) { //i = current letter in text
char cLetter = name.toString().charAt(i);
for (int o = 0; o < uNamesList.size(); o++) {
String uName = (String)uNamesList.get(o);
char uLetter = uName.charAt(i);
if (cLetter == uLetter) {
return o;
}
}
}
return match;
}
答案 1 :(得分:0)
将for循环更改为以下内容,从uNameList循环访问名称,其中长度可能不同
for (int i = 0; i < name.toString().length(); i++) {
char cLetter = name.toString().charAt(i);
for (int o = 0; o < uNamesList.size(); o++) {
答案 2 :(得分:0)
对于EditText,你需要GetText() name.toString()为你提供对象的java描述EditText
答案 3 :(得分:0)
你得到一个StringIndexOutOfBoundsException很可能是由于这一行:
char uLetter = uName.charAt(i);
i 可以大于 uName
的长度