从最后一个字符开始,向后迭代3

时间:2019-02-28 05:51:23

标签: java string reverse charat

我正在尝试创建一个接受任何字符串的代码,并将其中继回我,使之向后丢失每个第三个字符,包括最后一个字符。

  

EX:“ 123456789”应返回“ 963”&   “你好,世界!”应该返回“!r lH”

import java.util.Scanner;

public class cypher {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      String str = scnr.nextLine(); 
      String reverse = "";
      System.out.println(str.length());
      for (int i = str.length() - 1; i >= 0; --i) {
        reverse = reverse + str.charAt(i - 3);
      }
      System.out.println(reverse);
   }
}

以上是我到目前为止的代码。但是,当我运行此代码时,我收到以下错误消息:“线程“ main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1”

我不明白,因为字符串长度是10,所以为什么不能这样做呢?有人可以给我解释一下,并给我一些解决方法的建议吗?

5 个答案:

答案 0 :(得分:1)

我建议只是从最后一个位置开始,以3的增量向后移动字符串中的字符。

Scanner scnr = new Scanner(System.in);
String str = scnr.nextLine();
String reverse = "";

for (int i=str.length()-1; i >= 0; i=i-3) {
    reverse += str.charAt(i);
}

System.out.println(reverse);

您当前的方法失败了,因为循环仅需一步,而不是三步。还要注意,您可能想使用StringBuilder而不是String来构建reverse字符串。这可能会更有效(尽管JVM本身可能会自己替换StringBuilder)。

答案 1 :(得分:0)

根据您当前的逻辑str.charAt(i - 3),当i的值小于3时,您的代码将尝试访问-ve数字并对其进行索引,从而引发此异常。

您必须先检查i - 3 >= 0是否在使用str.charAt(i - 3)之前否则跳出循环。

答案 2 :(得分:0)

您当前的逻辑是str.charAt(i - 3),然后继续i >= 0str.charAt(i - 3)小于3时,java.lang.StringIndexOutOfBoundsException语句将生成i,因此应将代码更改为此。

public static void main(String args[]) {
    Scanner scnr = new Scanner(System.in);
    String str = scnr.nextLine();
    String reverse = "";
    System.out.println(str.length());
    for (int i = str.length() - 1; i >= 0; i = i - 3) {
        reverse = reverse + str.charAt(i);
    }
    System.out.println(reverse);
}

答案 3 :(得分:0)

我在系统中尝试了此代码,并且工作正常。试试这个:

import java.util.Scanner;

public class cypher {


public static void main(String[] args) {
  Scanner scnr = new Scanner(System.in);
  String str = scnr.nextLine(); 
  String reverse = "";
  System.out.println(str.length());
  for (int i = str.length() - 1; i>= 0; i-=3) {
    reverse = reverse + str.charAt(i);
  }
  System.out.println(reverse);


}}

答案 4 :(得分:0)

稍微更改了代码,现在可以正常工作了。

之所以得到java.lang.StringIndexOutOfBoundsException,是因为for循环每次都递减一步,而不是所需的步数3。因此,当字符串少于3个字符时,变量{{1 }}变为负数,并且以负值调用i函数时会引发异常。

charAt(i)
相关问题