获取java.lang.StringIndexOutOfBoundsException错误

获取java.lang.StringIndexOutOfBoundsException错误,java,Java,我正在做一个简单的密码程序。我遇到了这个错误 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.Sca

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

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);
        }
}
}
import java.util.Scanner;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.PrintWriter;
公营恺撒{
公共静态void main(字符串[]args){
字符串from=“abcdefghijklmnopqrstuvxyz”;
字符串to=“feathrzyxwvusqponmlkjigdcb”;
扫描仪控制台=新扫描仪(System.in);
System.out.print(“输入文件:”);
字符串inputFileName=console.next();
System.out.print(“输出文件:”);
字符串outputFileName=console.next();
试试{
FileReader=新的FileReader(“C:/”+inputFileName+“.txt”);
扫描仪输入=新扫描仪(读卡器);
PrintWriter out=新的PrintWriter(“C:/”+outputFileName+“.txt”);
while(在.hasNextLine()中){
String line=in.nextLine();
字符串outPutText=“”;
对于(int i=0;i
indexOf()如果在字符串中找不到相关字符,则返回-1。所以,你需要为这种情况建立一些应急机制。如果在“from”中找不到该字符,您希望代码执行什么操作?

indexOf()如果在字符串中找不到该字符,则返回-1。所以,你需要为这种情况建立一些应急机制。当在“from”中找不到字符时,您希望代码执行什么操作?

这是您在
for循环中的赋值:-

char c = to.charAt(from.indexOf(line.charAt(i)));
这里,在
indexOf
中,当在
from
字符串中找不到
char
时,返回
-1
,然后它将抛出
StringIndexOutfBoundsException

您可以在提取字符之前添加检查:-

int index = from.indexOf(line.charAt(i));

if (index >= 0) {
    char c = to.charAt(index);
    outPutText += c;
}
或:-


这是您在
for循环中的分配:-

char c = to.charAt(from.indexOf(line.charAt(i)));
这里,在
indexOf
中,当在
from
字符串中找不到
char
时,返回
-1
,然后它将抛出
StringIndexOutfBoundsException

您可以在提取字符之前添加检查:-

int index = from.indexOf(line.charAt(i));

if (index >= 0) {
    char c = to.charAt(index);
    outPutText += c;
}
或:-


令人惊讶的是,“StringIndexOutOfBounds”意味着您对无效的字符串操作使用了索引(在本例中,显然是
charAt
)。该消息甚至会告诉您无效索引是什么:-1。将复杂语句分解为更简单的部分将允许您使用调试器或简单的System.out.println语句检查中间结果,并自行解决此问题。“StringIndexOutOfBounds”令人惊讶地意味着您对无效的字符串操作使用了索引(在本例中,显然是
charAt
)。该消息甚至会告诉您无效索引是什么:-1。将复杂语句分解为更简单的部分将允许您使用调试器或简单的System.out.println语句检查中间结果,并自行解决。@shuffle1990。。不用客气:)很高兴你学到了一些东西。这就是犯错误的全部原因。干杯:)@shuffle1990。。不用客气:)很高兴你学到了一些东西。这就是犯错误的全部原因。干杯:)