【问题标题】:String index out of range error in javajava中的字符串索引超出范围错误
【发布时间】:2016-02-15 03:52:35
【问题描述】:

我正在尝试根据单词中的字母数打印不同的字符串,但我的第二个“if”语句破坏了代码。

import java.util.Scanner;
public class practice {


public static void main(String[] args) {
     Scanner in = new Scanner(System.in);
     System.out.printf("Enter a string: ");       
     String aString = in.next();
     int length = aString.length();

   char first =   aString.charAt(0);
   char second =  aString.charAt(1);
   char third =   aString.charAt(2);
   char fourth =  aString.charAt(3);
   char fifth =   aString.charAt(4);
   char sixth =   aString.charAt(5);
   char seventh = aString.charAt(6);

  if (length == 7) {
     System.out.println(String.format("Line 1: %s %s %s %s ", first, third, fifth, sixth));
     System.out.println(String.format("Line 2: %s %s %s ", second, fourth, sixth));
     System.out.println(String.format("Line 3: %s %s %s %s ", seventh, fifth, third, first));
  }
  else {
   if (length < 7) {
     System.out.println("the length is less than 7");
   }
      }
}

}

如果我输入的单词少于 7 个字母,我只会收到一条错误消息,显示“字符串索引超出范围:6”。我该如何解决这个问题?

【问题讨论】:

  • 粗略看,如果您的输入没有第 7 个字符,我相信是 char seventh = aString.charAt(6) 行中断。
  • 把 char 放在首位 = aString.charAt(0); char second = aString.charAt(1);第三个字符 = aString.charAt(2); char 第四 = aString.charAt(3);第五个字符 = aString.charAt(4); char 第六 = aString.charAt(5);第七个字符 = aString.charAt(6);如果在里面
  • 嘿,成功了,非常感谢!

标签: java string if-statement


【解决方案1】:

因为我不知道确切的要求,所以我刚刚解决了 coede 下面的错误检查

import java.util.Scanner;
public class practice {


public static void main(String[] args) {
 Scanner in = new Scanner(System.in);
 System.out.printf("Enter a string: ");
 String aString = in.next();
 int length = aString.length();


  if (length == 7) {
   char first =   aString.charAt(0);
   char second =  aString.charAt(1);
   char third =   aString.charAt(2);
   char fourth =  aString.charAt(3);
   char fifth =   aString.charAt(4);
   char sixth =   aString.charAt(5);
   char seventh = aString.charAt(6);
 System.out.println(String.format("Line 1: %s %s %s %s ", first, third, fifth, sixth));
 System.out.println(String.format("Line 2: %s %s %s ", second, fourth, sixth));
 System.out.println(String.format("Line 3: %s %s %s %s ", seventh, fifth, third, first));
}
else {
if (length < 7) {
 System.out.println("the length is less than 7");
}
  }
}

}    

【讨论】:

    【解决方案2】:

    首先检查length,然后访问字符。此外,您可以使用printf(而不是String.formatprintln)。类似的东西

    if (length >= 7) {
         char first =   aString.charAt(0);
         char second =  aString.charAt(1);
         char third =   aString.charAt(2);
         char fourth =  aString.charAt(3);
         char fifth =   aString.charAt(4);
         char sixth =   aString.charAt(5);
         char seventh = aString.charAt(6);
    
         System.out.printf("Line 1: %s %s %s %s%n", first, third, fifth, sixth);
         System.out.printf("Line 2: %s %s %s%n", second, fourth, sixth);
         System.out.printf("Line 3: %s %s %s %s%n", seventh, fifth, third, first);
     } else {
         System.out.println("the length is less than 7");
     }
    

    【讨论】:

      【解决方案3】:

      我打赌你输入了一个 6 个字母的单词。

      这是因为你的线路:

      char seventh = aString.charAt(6); // It tries to look for a 7th position in a String that has only six positions
      

      我会将所有的 char 赋值放入 if:

      public static void main(String[] args) {
       Scanner in = new Scanner(System.in);
       System.out.printf("Enter a string: ");       
       String aString = in.next();
       int length = aString.length();
      
      
        if (length == 7) {
             char first =   aString.charAt(0);
             char second =  aString.charAt(1);
             char third =   aString.charAt(2);
             char fourth =  aString.charAt(3);
             char fifth =   aString.charAt(4);
             char sixth =   aString.charAt(5);
             char seventh = aString.charAt(6);
      
           System.out.println(String.format("Line 1: %s %s %s %s ", first, third, fifth, sixth));
           System.out.println(String.format("Line 2: %s %s %s ", second, fourth, sixth));
           System.out.println(String.format("Line 3: %s %s %s %s ", seventh, fifth, third, first));
        }
        else {
          if (length < 7) {
              System.out.println("the length is less than 7");
          }
        }
      }
      

      【讨论】:

        【解决方案4】:

        试试下面的代码,它更通用。

                    import java.util.Scanner;
                    public class practice {
        
        
                    public static void main(String[] args) {
                         Scanner in = new Scanner(System.in);
                         System.out.printf("Enter a string: ");       
                         String aString = in.next();
                         char[] charArr=new char[10];
                         int length = aString.length();
                    for(int i=0;i<length;i++){
                        charArr[i] =   aString.charAt(i);
                    }
        
                      if (length == 7) {
                         System.out.println(String.format("Line 1: %s %s %s %s ", charArr[0], charArr[2], charArr[4], charArr[5]));
                         System.out.println(String.format("Line 2: %s %s %s ", charArr[1], charArr[3], charArr[5]));
                         System.out.println(String.format("Line 3: %s %s %s %s ", charArr[6], charArr[4], charArr[2], charArr[0]));
                      }
                      else {
                       if (length < 7) {
                         System.out.println("the length is less than 7");
                       }
                          }
                    }
        
                    }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-25
          • 2015-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多