我正在尝试编写一个代码来格式化一系列字符串(我稍早发布了这个字符,但几分钟后将其删除,因为我认为我没有付出足够的努力)。我现在正在重新发布,因为我不断收到“索引超出范围”错误,但我不确定如何修复它。
我已经尝试将我能想到的所有内容包装在“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);
}
答案 0 :(得分:2)
当你有一个循环,如:
for (int i = x; i < b.length(); i++)
i
从x
转到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);
}
}
输出: 一个