head が割り当てられている行で次の例外が発生しますが、その理由はわかりません。
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());