-3
Мне нужно получить последние четыре символа из строки, но каждый раз, когда я вводил что-то, я получаю StringIndexOutOfBoundsException
. Пожалуйста, помогите мне решить эту ошибку.Я хочу получить последние четыре символа строки
import java.util.Scanner;//need for Scanner
import java.io.*;
public class PansiyuA3Q2 {
public static void main(String[] args)throws Exception {
Scanner autoFile = new Scanner(new File("AutoCorrectMe.txt"));
String a =getFileName();
}
static String getFileName(){
Scanner keyboard = new Scanner(System.in);//need for Scanner
String a ="";//variable a
String change = "";//get the last four character
boolean valud ;//boolean valud
int length = a.length();
do{
System.out.println("Enter the name of the file: ");//print Enter the name of the file:
a= keyboard.nextLine();//get from user
change = a.substring(length-4,length);
if(change.equalsIgnoreCase(".txt"))//a equal autocrrectme.txt and ignore capital
valud = true;//get true
else //if a equal atuocorrectme and ignore capital
System.out.println("The file name must end with .txt");//print The file name must end with .txt
valud = false;//get false
} while(!valud);//do while
return a;
}//method getFilName
}
Я могу скомпилировать его, но когда я запускаю программу, независимо от слова, которое я вводил, он говорит, что есть ошибка.
java.lang.StringIndexOutOfBoundsException: String index out of range: -4
at java.lang.String.substring(Unknown Source)
at PansiyuA3Q2.getFileName(PansiyuA3Q2.java:22)
at PansiyuA3Q2.main(PansiyuA3Q2.java:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
Тогда что? Вы просто сдались, когда увидели исключение? Что привело ваша отладка? Не просто сбрасывайте свои программы здесь. Объясните, в чем проблема и почему это происходит. –
Длина a равна 0. Запустите отладчик, и вы увидите, что не так. –
Или подумайте, откуда должно исходить число -4 в трассе стека. –