-1 java string indexoutofboundsexception
我在分配头部的行上遇到以下异常,我不确定原因:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 44
当使用"{1,2},3"作为s运行调试器的值时,我可以跟随循环,并且正确地将其分配commaSpot为5,因为我认为它应该是.但由于某种原因s.charAt(commaSpot)),即使s长度为7个字符,也不认为5是有效索引.
int commaSpot = 0;
int bracePairs = 0;
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '{') bracePairs++;
if(s.charAt(i) == '}') bracePairs--;
if(s.charAt(i) == ',' && bracePairs == 0) {
commaSpot = i;
break;
}
}
head = s.substring(0, s.charAt(commaSpot));
tail = s.substring(s.charAt(commaSpot), s.length());
Run Code Online (Sandbox Code Playgroud)
问题是你使用结果s.charAt(commaSpot)作为第二个参数 - 而不是commaSpot它自己.你要:
head = s.substring(0, commaSpot);
tail = s.substring(commaSpot, s.length());
Run Code Online (Sandbox Code Playgroud)
您不关心字符串的值commaSpot- 或者更确切地说,您知道它是逗号(Unicode值44,因此是异常消息).你关心自己的价值commaSpot,这是你想要拆分的地方.