java - 线程中的异常 "main"java.lang.StringIndexOutOfBoundsException : String index out of range: 5 at java. lang.String.charAt(String.java:646)

标签 java

以下程序是来自 hackerrank 的 GAME OF THRONES-1 问题。但我在执行时遇到了给定的错误。 如果有人能提供帮助,我将不胜感激。 错误将是:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.lang.String.charAt(String.java:646)

这是我的代码

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
import java.util.Arrays;

public class try123 
{
    public static void main(String[] args) 
    {
        Scanner myScan = new Scanner(System.in);
        String inputString = myScan.nextLine();
        String s=inputString;        //abccba
        String ans;     //YES or NO
        String A="";
        int flag=0;  
        String news="";
        String nrev="";
        String rev="";
        //char arr[]=new char[100000];
        char arr[]=inputString.toCharArray();
        Arrays.sort(arr);
        String b= new String(arr);   //sorted string

        int len=b.length();
        if((len%2)!=0)
        { 
            A=b.substring(len-1,len);

            len=len-1;
            b=b.substring(len-1);
            flag=1;
        }
        for(int l=(len-1);l>=0;l--)
        {
            rev=rev+b.charAt(l);
        }
        for(int i=1;i<len;i=i+2)  //len=6
        {
            news=news+b.charAt(i)+rev.charAt(i-1);
        }
        if(flag==1)
            news=news.substring(0,(len/2)-1)+A+news.substring((len/2),len-1);
        for(int o=(news.length()-1);o>=0;o--)
        {
            nrev=nrev+b.charAt(o);
        }
        if(news==nrev)
            ans="YES";
        else
            ans="NO";
        System.out.println(ans);  
        myScan.close();
    }
}

最佳答案

问题就在这里:

   if((len%2)!=0)
   { 
       A=b.substring(len-1,len);
       len=len-1;
       b=b.substring(len-1); // this returns a String with the last 2 characters of
                             // the original
       flag=1;
   }

当输入字符串的长度为奇数时,您仅保留该字符串的最后两个字符。

我认为您只想删除字符串的最后一个字符,应该这样做:

   if((len%2)!=0)
   { 
       A=b.substring(len-1,len);    
       len=len-1;
       b=b.substring(0,len); // this would return the original String minus the last
                             // character
       flag=1;
   }

关于java - 线程中的异常 "main"java.lang.StringIndexOutOfBoundsException : String index out of range: 5 at java. lang.String.charAt(String.java:646),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27462980/

相关文章:

java - 如何在不发出单独请求的情况下从 shoutcast 流中分离元数据和轨道

java - 在jetty中部署静态内容

java - 算法的原语运算

java - jackson 序列号 : Setting field value as XML element name

java - java中如何比较时间

java - 如何从电话号码中删除 "+"和国家代码?

java - 如何在 Eclipse 中使用带有 gwt 的 chrome 扩展 api?

java - 如何在java中为标准对象编写泛型扩展?

java - 仅使用 Java 搜索文本

java - EntityManager 未正确注入(inject),始终为 null