无法绕过索引超出范围的错误

时间:2014-11-19 06:51:14

标签: java

我正在尝试编写一个代码来格式化一系列字符串(我稍早发布了这个字符,但几分钟后将其删除,因为我认为我没有付出足够的努力)。我现在正在重新发布,因为我不断收到“索引超出范围”错误,但我不确定如何修复它。

我已经尝试将我能想到的所有内容包装在“if”语句中,这些语句应该防止超出范围错误,但它们没有帮助!

你看到了什么问题吗?

(仅供参考:ExpressionTools.isOp(char)是一个返回true或false的方法,具体取决于所讨论的字符是否为运算符:+, - ,*,/)

public static List<String> postfix = new ArrayList<String>();

public static String result; // the result of corrected string

// corrects formating in postfix string if any errors, enters into postfix
// array
public static void spaces(String a, int x) {
    StringBuilder b = new StringBuilder(a);

    for (int i = x; i < b.length(); i++) {
        if (b.charAt(i) == ' ') {
            while (b.charAt(i + 1) == ' ') {
                b.deleteCharAt(i + 1);
            }
            result = b.toString(); 
            }
        if (ExpressionTools.isOp(b.charAt(i))) {
            if (i+1 == 0) break;
            else{
                while (ExpressionTools.isOp(b.charAt(i + 1))){
                    b.insert(i+1, ' ');
                }
            }
        }
    }
    System.out.println(result);
    String r = b.toString();
    postfix.add(r);

}

3 个答案:

答案 0 :(得分:2)

当你有一个循环,如:

for (int i = x; i < b.length(); i++)

ix转到b.length()-1

因此,i+1会达到b.length(),此时b.charAt(i + 1)超出范围并会抛出您获得的异常。

答案 1 :(得分:0)

循环i直到b.length()并在if条件下,检查导致此错误的char(i + 1)。

答案 2 :(得分:0)

b.charAt(i + 1)导致索引超出绑定异常...因为charAt()也开始从零开始计数...... 例如:

public class Test {

   public static void main(String args[]) {
      String s = "Strings are immutable";
      char result = s.charAt(8);
      System.out.println(result);
   }
}

输出: 一个