原文在
今天在玩開源的Script的引擎的時候在解釋下面script的時候出現(xiàn)問題,
你知道為什么嗎
i = 5
j = 1232323
h = i + j
println(h)
拋出這個異常
4 : Illegal statment ,String index out of range: -9
java.lang.StringIndexOutOfBoundsException: String index out of range: -9
at java.lang.String.substring(Unknown Source)
at gscript.Interpreter.callSub(Interpreter.java:1355)
at gscript.Interpreter._sub(Interpreter.java:401)
at gscript.Interpreter.callSub(Interpreter.java:1353)
at gscript.Interpreter.start(Interpreter.java:227)
at gscript.Interpreter.start(Interpreter.java:198)
at ScriptTest.main(ScriptTest.java:12)
后來發(fā)現(xiàn)原來是println(h)少了一個換行符號。
現(xiàn)在我修改了下源代碼。
我修改了下代碼后,這個bug解決了
看原來的代碼
for (int i = 0; i < srcBytes.length; i++) {
if (srcBytes[i] == 0x0a || i + 1 == srcBytes.length) { // 行結(jié)束,或者文件結(jié)束
try {
String s = new String(line.toByteArray()); // j2me使用
// String s = new String(line.toByteArray(), "GB2312");
// //j2se使用
s = s.trim();
srcCode[lineCount++] = s;
} catch (Exception ex1) {
}
line.reset();
} else {
line.write(srcBytes[i]);
}
}
修改后的代碼
for (int i = 0; i < srcBytes.length; i++) {
if (srcBytes[i] == 0x0a ) { // 行結(jié)束,或者文件結(jié)束
try {
String s = new String(line.toByteArray()); // j2me使用
// String s = new String(line.toByteArray(), "GB2312");
// //j2se使用
s = s.trim();
//System.out.println(s);
srcCode[lineCount++] = s;
} catch (Exception ex1) {
}
line.reset();
} else {
line.write(srcBytes[i]);
if(i + 1 == srcBytes.length){
String s = new String(line.toByteArray()); // j2me使用
// String s = new String(line.toByteArray(), "GB2312");
// //j2se使用
s = s.trim();
s = s.trim();
//System.out.println(s);
srcCode[lineCount++] = s;
}
}
}
http://www.3geye.net/?3/viewspace-3196
今天在玩開源的Script的引擎的時候在解釋下面script的時候出現(xiàn)問題,
你知道為什么嗎
i = 5
j = 1232323
h = i + j
println(h)
拋出這個異常
4 : Illegal statment ,String index out of range: -9
java.lang.StringIndexOutOfBoundsException: String index out of range: -9
at java.lang.String.substring(Unknown Source)
at gscript.Interpreter.callSub(Interpreter.java:1355)
at gscript.Interpreter._sub(Interpreter.java:401)
at gscript.Interpreter.callSub(Interpreter.java:1353)
at gscript.Interpreter.start(Interpreter.java:227)
at gscript.Interpreter.start(Interpreter.java:198)
at ScriptTest.main(ScriptTest.java:12)
后來發(fā)現(xiàn)原來是println(h)少了一個換行符號。
現(xiàn)在我修改了下源代碼。
我修改了下代碼后,這個bug解決了
看原來的代碼
for (int i = 0; i < srcBytes.length; i++) {
if (srcBytes[i] == 0x0a || i + 1 == srcBytes.length) { // 行結(jié)束,或者文件結(jié)束
try {
String s = new String(line.toByteArray()); // j2me使用
// String s = new String(line.toByteArray(), "GB2312");
// //j2se使用
s = s.trim();
srcCode[lineCount++] = s;
} catch (Exception ex1) {
}
line.reset();
} else {
line.write(srcBytes[i]);
}
}
修改后的代碼
for (int i = 0; i < srcBytes.length; i++) {
if (srcBytes[i] == 0x0a ) { // 行結(jié)束,或者文件結(jié)束
try {
String s = new String(line.toByteArray()); // j2me使用
// String s = new String(line.toByteArray(), "GB2312");
// //j2se使用
s = s.trim();
//System.out.println(s);
srcCode[lineCount++] = s;
} catch (Exception ex1) {
}
line.reset();
} else {
line.write(srcBytes[i]);
if(i + 1 == srcBytes.length){
String s = new String(line.toByteArray()); // j2me使用
// String s = new String(line.toByteArray(), "GB2312");
// //j2se使用
s = s.trim();
s = s.trim();
//System.out.println(s);
srcCode[lineCount++] = s;
}
}
}