在Java中获取“线程“主”中的异常java.lang.StringIndexOutOfBoundsException”

时间:2018-10-28 02:43:28

标签: java

输出应该是用自己的行向后打印的数组中的每个字

public class Main
{
    public static void main(String[] args)
    {
         String [] list = {"every", "nearing", "checking", "food", "stand", "value"};
         String reverse = "";
         int length = list.length;
         for(int j=0; j<list.length; j++)
         {
            String word = list[j];
            for ( int i = length - 1 ; i >= 0 ; i-- )
            {
                reverse = reverse + word.charAt(i);
            }
            System.out.println(reverse);
         }

    }
}

但我一直收到此消息

   Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String 
    index out of range: 5
    at java.lang.String.charAt(String.java:658)
    enter code here`at Main.main(Main.java:13)

4 个答案:

答案 0 :(得分:1)

我稍微整理了一下代码。不要依赖那些不会提高代码可读性的临时变量。尝试使用for-each循环(它们提高了可读性)。应用这两点,可以给我们

String[] list = { "every", "nearing", "checking", "food", "stand", "value" };
for (String word : list) {
    for (int i = word.length() - 1; i >= 0; i--) {
        System.out.print(word.charAt(i));
    }
    System.out.println();
}

,它基于您的原始代码。就个人而言,我更倾向于使用StringBuilder及其reverse()方法。喜欢,

for (String word : list) {
    System.out.println(new StringBuilder(word).reverse());
}

(在Java 8+中),并且带有map之类的

Arrays.stream(list).map(s -> new StringBuilder(s).reverse())
        .forEachOrdered(System.out::println);

答案 1 :(得分:0)

for ( int i = length - 1 ; i >= 0 ; i-- )

上面使用的length值是list数组的长度,而不是单词。

在每次循环后,请记住将反向单词留空:

        System.out.println(reverse);
        reverse = "";

如果不冲洗,您将得到:

yrev
yrevgnirae
yrevgniraegnikceh
yrevgniraegnikcehdoo
yrevgniraegnikcehdoodnat
yrevgniraegnikcehdoodnateula

代替:

yrev
gnirae
gnikceh
doo
dnat
eula

答案 2 :(得分:0)

验证提供的参数在Main.java:13中有效。检查提供的偏移量是否指向有效索引,并且count参数是否指向大于字符串本身大小的索引。

备用:

public  String[]  reverseString(String[] words)
{
    String[] reverse=new String[words.length];

    for(int i=0;i<words.length;i++)
    {   
        //added for setting element as emptyString instead of null
        reverse[i] = "";
        for(int j=words[i].length()-1;j>=0;j--)
        {
            reverse[i]+=words[i].substring(j,j+1);
        }
    }
    System.out.println(Arrays.toString(reverse));
    return reverse;

}

答案 3 :(得分:0)

第11行,更改

int i = length-1;

int i = word.length()-1;

该异常将消失。