【问题标题】:String IndexOut Of Bounds Exception error in javajava中的字符串索引越界异常错误
【发布时间】:2012-10-03 13:12:31
【问题描述】:

我制作了一个程序来反转输入字符串的单词 有错误代码:

                   Exception in thread "main" java.lang.StringIndexOutOfBoundsException:String index out of range: 17
                   at java.lang.String.charAt(String.java:695)
                   at Rev.main(Rev.java:14)

主程序代码为:

import java.io.*;
class Rev
{
 public static void main(String args[])throws IOException
  {
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter String");
    String a=br.readLine();
    a=" "+a+" ";
    int x=a.length();
    String b;
    for(int z=a.length()-1;z>=0;z--)
    {
     if (a.charAt(z)==' ')
     {
      b=a.substring(z,x);
      System.out.print(b+" ");    
      a=a.replace(b,"");
     }
    }
  }

}

【问题讨论】:

  • 你不应该在你的for循环中修改a,因为for条件是基于它的。
  • 您可能会发现 StringBuilder 是一个更好的起点。
  • Here is some discussion 在这个主题上提供了多个可能对您有所帮助的实现示例。
  • 无论何时执行a=a.replace(b,""),您的字符串都会缩短任意数量。您是否意识到此方法替换了字符串中所有出现的 b?但是,即使它只替换了一次,也会出现相同的错误。你必须彻底重新考虑你的循环。
  • @HyperAnthony 这是一个关于如何递归执行的问题。这是反转字符串的一种不好且不是很直观的方法。

标签: java


【解决方案1】:

如果 Java 专业人士需要解决您的问题,他只需几行代码即可完成:

final List<String> words = Arrays.asList(input.split(" "));
Collections.reverse(words);
for (String word : words) System.out.print(word + " ");
System.out.println();

如果您将此作为练习并想自己实现,您仍然可以考虑使用相同的基本思想。例如,遍历您的字符串并将空格的所有位置收集到List&lt;Integer&gt;。然后使用input.substring(list.get(i), list.get(i-1)) 向后处理该列表。

【讨论】:

    【解决方案2】:

    我知道这不是你问题的答案,但你为什么不试试 StringBuilder 或 StringBuffer 方法,也就是 reverse()

    StringBuilder sb = new StringBuilder("Hello");
    
    sb.reverse();
    

    【讨论】:

      【解决方案3】:

      您知道您指定的字符串索引是错误的。你知道错误发生在哪里。添加System.out.println 调用以在错误语句之前以及代码中的其他关键点打印字符串索引和字符串长度。调试问题。

      【讨论】:

        【解决方案4】:

        为什么不按空格分割输入并存储在数组中并反转数组?

        【讨论】:

        • 这是一个问题,而不是一个答案。 (很好的建议,但您应该显示代码和指向 Javadocs 的链接,特别是考虑到 OP 可能的技能水平..)
        【解决方案5】:

        也许你应该试试:

        int x=a.length()-1;
        

        子字符串导致错误

        【讨论】:

          猜你喜欢
          • 2019-08-01
          • 2013-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-16
          • 2017-03-22
          • 1970-01-01
          相关资源
          最近更新 更多