当前位置: 首页 > 知识库问答 >
问题:

获取java.lang.StringIndexOutOfBoundsException错误[重复]

公孙志尚
2023-03-14

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

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);
        }
}
}

共有1个答案

严兴言
2023-03-14

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

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

这里,inindexoffrom字符串中找不到char时返回-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;
} 
 类似资料:
  • 以下代码禁止使用403,尽管“https://jsonplaceholder.typicode.com/posts/1”在postman中有效 错误: 如果有人能建议,我需要在代码中添加什么

  • 我试图部署我的Flask应用程序与,但我得到一个错误如下; 错误:给出了双重要求:setuptools(已在setuptools==52.0.0.post20210125中,name='setuptools')警告:您正在使用pip版本20.2。3.但是,版本21.1。有3个。您应该考虑通过“/用户/ YoNoSink”/文档/ JBRY-Req-LoalAl2/JBRY-RexApIIL2/DO

  • 我在观看youtube ReactJS PHP基于令牌的Restful API用户身份验证时遇到了获取用户数据的问题,我遵循了他的教程,但出现了这个错误。 在我的控制台中,我得到了这个错误。 未捕获(promise中)语法错误:意外标记 我创建了UserData。js并导入此用户数据。js到我的登录页面 导入{UserData}from'./UserData'; 这是我的按钮手柄提交: 在我的网络

  • 我无法恢复数据从我的Wordpress API与改造库。错误是:HTTP FAILED:java.net.未知主机异常:无法解决主机"app.divion.fr":没有地址与主机名关联 ApiClient: } API接口: 公共接口{ } 显示xml Thx;)

  • 所以,我从用户提示输入变量。如果变量小于0且大于10。如果用户输入

  • 在将新更新安装到Visual Studio后,我才开始出现此错误。出于某种原因,我的建筑现在都不会从詹金斯那里得到。已经做了几个小时了,似乎还不明白。 我从比特桶里取东西。 请帮助。 由工作区C:\Program Files(x86)\Jenkins\workspace\CA[WS-CLEANUP]中的计时器生成启动删除项目工作区。。。[WS-CLEANUP]已完成克隆远程Git存储库克隆存储库h