일련의 문자열을 형식화하는 코드를 작성하려고합니다. (조금 전에 게시했지만 몇 분 후에 삭제 한 것으로 생각하여 삭제했습니다. 에서 충분한 노력). "범위를 벗어난 색인"오류가 계속 발생하기 때문에 지금 다시 게시하고 있지만 수정 방법은 확실하지 않습니다.범위를 벗어난 색인에서 벗어날 수 없음
"범위 밖의 오류를 방지해야하는"if 문에서 생각할 수있는 모든 것을 래핑하려고했지만 도움이되지 않습니다!
잘못된 것이 있습니까?
(참고 : ExpressionTools.isOp (문자)가 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);
}
'b.charAt (i + 1)'는 문자열의 끝에있을 때, 즉'i'가'b.length() - 1'와 같을 때 범위를 벗어납니다. –
'b.chartAt (i + 1)'이 길이에 도달 한 다음 하나 이상의 인덱스가 나올 것이기 때문에'i
ochi
'if (i + 1 == 0) break'에서이 문제를 피하십시오 -하지만 어떻게'i + 1 == 0'이 참일 수 있습니까? 이것은 오타 였습니까? – ajb