得到java.lang.StringIndexOutOfBoundsException错误

而我正在做一个简单的密码程序。 我遇到了这个错误

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.charAt(Unknown Source) at Caesar.main(Caesar.java:27) 

好吧,我不清楚原因是什么。 我需要一些老手的帮助@@下面是我的代码。

 import java.util.Scanner; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; public class Caesar { public static void main(String[] args){ String from = "abcdefghijklmnopqrstuvwxyz"; String to = "feathrzyxwvusqponmlkjigdcb"; Scanner console = new Scanner(System.in); System.out.print("Input file: "); String inputFileName = console.next(); System.out.print("Output file: "); String outputFileName = console.next(); try{ FileReader reader = new FileReader("C:/"+inputFileName+".txt"); Scanner in = new Scanner(reader); PrintWriter out = new PrintWriter("C:/"+outputFileName+".txt"); while (in.hasNextLine()){ String line = in.nextLine(); String outPutText = ""; for (int i = 0; i < line.length(); i++){ char c = to.charAt(from.indexOf(line.charAt(i))); outPutText += c; } System.out.println("Plaintext: " + line); System.out.println("Ciphertext: " + outPutText); out.println(outPutText); } System.out.println("Processing file complete"); out.close(); } catch (IOException exception){ System.out.println("Error processing file:" + exception); } } } 

这是你在for loop : –

 char c = to.charAt(from.indexOf(line.charAt(i))); 

这里,当在string中找不到char时, indexOf返回-1 ,然后它将抛出一个StringIndexOutOfBoundsException

您可以在获取角色之前添加一个检查: –

 int index = from.indexOf(line.charAt(i)); if (index >= 0) { char c = to.charAt(index); outPutText += c; } 

要么: –

 char ch = line.charAt(i); if (from.contains(ch)) { char c = to.charAt(from.indexOf(ch)); outPutText += c; } 

如果在字符串中找不到有问题的字符,则indexOf()返回-1。 所以,你需要为这种情况建立一些偶然性。 如果在“from”中找不到该字符,您希望代码执行什么操作?