for循环过度扩展索引

时间:2015-03-09 01:18:51

标签: android

我正在尝试遍历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;

}

4 个答案:

答案 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

的长度