获取StringIndexOutOfBoundsException,即使我的字符串长于它给出的值

时间:2017-05-31 19:20:04

标签: java

我一直在线程“main”中得到异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:35018  并且告诉我35054个字符是大的,即使我最近检查了有多少字符和它的大约7000我想知道是否有人可以帮我这个。这是有问题的代码。

         if (twojunglers[0].equals("hecarim")) {
            if (twojunglers[1].equals("leesin")) {
                String codeblock;
                String codeblock1;
                String codeblock2;
                while ((codeblock = br.readLine()) != null) {
                    String makelinesintoone;
                    StringBuilder builder = new StringBuilder();
                    while ((makelinesintoone = br.readLine()) != null){
                        builder.append(makelinesintoone);

                    }
                    int hi = builder.indexOf("Red\">");
                    if (hi >= 0) {
                        codeblock1 = codeblock.substring(0, hi);
                        int cutstring_ = codeblock1.indexOf("Champion\">");
                        if (cutstring_ >= 0) {
                            codeblock2 = codeblock1.substring(0, cutstring_);
                            System.out.println(codeblock2);

2 个答案:

答案 0 :(得分:0)

StringIndexOutOfBoundsException是一个例外,表示String对象上使用的索引为负数或大于String的大小。

在您的实际代码中,问题很可能是由substring()调用引起的:

int hi = builder.indexOf("Red\">");
if (hi >= 0) {
    codeblock1 = codeblock.substring(0, hi);

您调用返回indexOf() int的builder变量上的hi,然后在substring(0, hi)变量上调用codeblock
问题是,codeblockbuilder变量不会引用相同的String,因为您从两个不同的读取行中对它们进行了评估:

while ((codeblock = br.readLine()) != null) {

和:

StringBuilder builder = new StringBuilder();
while ((makelinesintoone = br.readLine()) != null){
   builder.append(makelinesintoone);

没用。

答案 1 :(得分:0)

问题非常严重,因为没有完整的解释或您的所有代码都可用。也许检查哪一行给你问题并更新你的问题。

虽然要检查的事情可能会节省时间。

请确保您将stringsstrings分配,而strings分配charsints等。

如果您使用char获得string范围之外的某个charAt

请更新您的问题并提供完整的错误。