java - 获取 java.lang.StringIndexOutOfBoundsException 错误

标签 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.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 循环 中的赋值:-

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

这里,当from字符串中没有找到char时,in 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;
} 

关于java - 获取 java.lang.StringIndexOutOfBoundsException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13517711/

相关文章:

用于替代字符串排序的 Java 比较器

java - 为什么 containsAll 在第二种情况下确实返回 true

java - GetTime 不能正确显示零

java - 如何在处理中使用计数器或倒计时清除/重置 Canvas ?

java - 如何将RGB值与其颜色名称对应起来?

java - 用于解析 xml 的正则表达式问题

java - Maven pom 文件继承范围

java - 带有 ContextThemeWrapper 的 LayoutInflater 并不总是主题化

java - 模拟对象返回实际数据

java - 广告选择面板抛出 JCombobox