Java:尝试运行我的字符串函数时,获取字符串索引超出范围错误

时间:2013-11-19 02:46:42

标签: java string indexoutofboundsexception

package unl.cse.strings;
import java.lang.Character;
import java.lang.String;

public class StringUtils {
    public static int longestCommonPrefix(String a, String b){
       int sizeOfResult=0;
       int size=0;
       int i=0;
       if (a.length() == 0 || b.length() == 0 ){
          return sizeOfResult;
       } else if (a.length()>b.length()){
          size = a.length();
       } else {
          size = b.length();
       } 
       for(i=0; i<size; i++){
          if(a.charAt(i) != b.charAt(i)){
             break;
          }
       sizeOfResult++;
       }
       return sizeOfResult;
    }

    public static String removeBlanks(String s){
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<s.length(); i++) {
            if(!Character.isWhitespace(s.charAt(i))) {
                sb.append(s.charAt(i));
            }
        }
        return sb.toString();
    }
    public static String flipCase(String s){
        StringBuilder sb = new StringBuilder();
        int i = 0;

        for (i=0;i<s.length();i++) {
            if (Character.isLetter(s.charAt(i))) {
                if (Character.isUpperCase(s.charAt(i))){
                    sb.append(Character.toLowerCase(s.charAt(i)));
                }
                if (Character.isLowerCase(s.charAt(i))) {
                    sb.append(Character.toUpperCase(s.charAt(i)));
                }
            }
            else {
                sb.append(Character.toUpperCase(s.charAt(i)));
            }
        }
        return sb.toString();
    }
}

当我编译程序时,我得到了:

  

测试longestCommonPrefix(glossary,gloss)...线程中的异常   “main”java.lang.StringIndexOutOfBoundsException:字符串索引   范围:5在java.lang.String.charAt(String.java:658)at   unl.cse.strings.StringUtils.longestCommonPrefix(StringUtils.java:17)     在   unl.cse.strings.StringUtilsGrader.testLCP(StringUtilsGrader.java:15)     at unl.cse.strings.StringUtilsGrader.main(StringUtilsGrader.java:78)   警告:进程退出时带有(n)未知(1)错误代码

我不确定我在哪里尝试访问超出范围的字符串部分。

2 个答案:

答案 0 :(得分:2)

您将size设置为等于两个长度的更长,但您应该使用两者中的更短

            //...
            } else if (a.length()>b.length()){
                size = a.length();
            //...

这肯定会导致一个越界异常(你现在这样做的方式):

            } for(i=0; i<size; i++){
                if(a.charAt(i) != b.charAt(i)){

答案 1 :(得分:0)

您可以按照以下条款更改条件Execption将继续执行。

else if (a.length() < b.length()) {
        size = a.length();
    }