Java:字符串索引超出范围:-1

标签 java string range out

新代码:

我不知道这里发生了什么,我收到此错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1949)
    at client0_0_2.loginToClient(client0_0_2.java:98)
    at client0_0_2.general(client0_0_2.java:196)
    at client0_0_2.<init>(client0_0_2.java:208)
    at client0_0_2.main(client0_0_2.java:215)

这是导致错误的方法的内容:

public String loginToClient() throws FileNotFoundException, IOException {
    //decryptUsers();
    int tries;
    tries = 5;
    while (tries > 0) {
        System.out.println("LOGIN");
        String usnm = c.readLine("Username: ");
        char [] passwd = c.readPassword("Password: ");
        users = new FileInputStream("users.fra");
        DataInputStream dis = new DataInputStream(users);
        BufferedReader br = new BufferedReader(new InputStreamReader(dis));
        String logindat = br.readLine();
        System.out.println(logindat);
        int startUsnm = logindat.indexOf(usnm);
        String logdat = logindat.substring(startUsnm, logindat.indexOf("."));
        if (startUsnm == -1) {
            System.err.println("Username not recognised, please try another or create user.");
            usnm = "INV";
            return usnm;
        }
        else {
            int tendUsnm = logdat.indexOf(':'); 
            int startPass = endUsnm + 1;
            int tendPass = logdat.indexOf('.');
            String Usnm = logdat.substring("0", tendUsnm);
            String Pass = logdat.substring(startPass, endPass);
            char [] Passwd = Pass.toCharArray();
            if (usnm.equals(Usnm)) {
                if (Arrays.equals(passwd,Passwd)) {
                    System.out.println ("Logged in. Welcome, " + usnm + ".");
                    String data = "LOGIN: " + usnm;
                    printLog(data);
                    //encryptUsers();
                    return usnm;
                }
                else {
                    System.out.println ("Incorrect password, please try again.");
                    String data = "PASWFAIL: " + usnm;
                    printLog(data);
                    tries -= 1;
                }
            }
            else {
                System.out.println ("Username not recognised.");
                printLog("USNAMFAIL");
                usnm = "INV";
                return usnm;
                //encrytUsers();
            }
        }
    }
    //encryptUsers();
    System.exit(2);
    return usnm;
}

它看起来有点像它试图访问某个东西的最后一个字符,这让它感到不安,但我不知道为什么。对新手有什么帮助吗?

编辑:

users.fra 在执行时包含用户名:密码

注意:第 98 行是

char [] Passwd = Pass.toCharArray();

n.b.不是家庭作业,而是个人项目。

将添加一个方法来处理用户名不在users.fra中的事件。

最佳答案

当找不到参数时,

indexOf() 返回 -1。我敢打赌,您正在搜索的字符串不包含您正在搜索的字符之一,并且当您尝试获取子字符串时,它会导致无效索引。

关于Java:字符串索引超出范围:-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818232/

相关文章:

java - 如何针对这种情况创建 hibernate 映射?

java - 我可以在一个命令中链接 observableListclear() 和 addAll() 吗?

javascript - 搜索 javascript 字符串并获取单词索引而不是字符

c - 使用 strncopy 显示输出

MySQL 查询日期范围

python - 在python中将整数列表转换为范围

ruby - 尝试使用 SecureRandom.random_number ruby​​ 2.0.0 的包含范围

java - 如何使用分隔线上的箭头按钮(或类似按钮)移动/调整窗扇表单的窗扇大小?

java - 如何使用 JSch 在服务器上使用别名?

java - 如何测试索引越界错误?