Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:字符串索引超出范围:-1_Java_String_Range_Out - Fatal编程技术网

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

Java:字符串索引超出范围:-1,java,string,range,out,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_

新代码:

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

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)
它看起来有点像是试图访问某个东西的最后一个字符,这让它很不安,但我不知道为什么。对新手有什么帮助吗

编辑:

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

注:第98行是

char [] Passwd = Pass.toCharArray();
n、 不是家庭作业,而是个人项目


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

indexOf在找不到参数时返回-1。我敢打赌,您正在搜索的字符串没有您正在搜索的字符之一,当您尝试获取子字符串时,它会导致无效索引。

很多事情都可能出错。你必须检查打印的内容

例如:

int startUsnm = logindat.indexOf(usnm);
String logdat = logindat.substring(startUsnm, logindat.indexOf("."));
如果您在LoginData中没有Username:,它将生成您看到的异常

编辑:请注意,如果要允许用户名:而不仅仅是用户名:,则可以执行以下操作:

 int startUsnm = logindat.toLowerCase().indexOf("username:");
并测试startUsnm是否大于等于0。

尝试在indexOf之前为您的字符串使用contains,以避免出现indexOf返回-1,而您尝试获取具有-1位置的子字符串的情况。

string.indexOf将在不匹配的情况下返回-1

如果给String.substring一个负的开始值,它将抛出StringIndexOutOfBoundsException

这些都记录在

因此,我来看看这行代码:

String logdat = logindat.substring(startUsnm, logindat.indexOf("."));

如果usnm不在LoginData中,则此操作将失败。您应该仔细查看这些行:

        int startUsnm = logindat.indexOf(usnm);
        int tendUsnm = logdat.indexOf(':');
        int endUsnm = startUsnm + tendUsnm;
        int startPass = endUsnm + 1;
        int tendPass = logdat.indexOf('.');
        int endPass = startPass + tendPass;
        String Usnm = logindat.substring(startUsnm, endUsnm);
        String Pass = logindat.substring(startPass, endPass);
假设您有这样的文件:

用户:通过

因此:

startUsnm=0//第一个字符 tendUsnm=4//索引:char endUsnm=4//sum?这可能不是你想要做的 startPass=5//p字符 tendPass=9/。烧焦 endPass=14//是否再次求和?这些整数是索引-将抛出IndexOutOfBounds

并考虑如果给定字符串中没有匹配,则索引将返回-1值。

请提供一个例子,导致这个行为,我不认为这是第98行CHAR[] PASWD= PASS.ToCARARTRAIL;我相信编译器可能指出了错误的行,就像它有时指出的那样。谢谢!不应该是。。。它在一个只包含username:password的文件中查找明文用户名和密码,所以我想我已经搞砸了其中一个搜索…如果username不是users.fra文件中的第一个,那么求和的整数就是;id est,它可能包含用户名:密码。usrn:pass。我只寻找usrn,而不是用户名。这应该给我用户名末尾相对于整个字符串的位置。我刚刚意识到这是一个毫无意义的练习,因为我有一个字符串,它只是usrn到…的索引。。。。现在将进行调整。我应该如何准确地使用contains?例如:ifmyString.containssomechan&&myString.containssomeOhterChar{String subString=myString.subString myString.indexOfsomeChar,myString.indexOfsomeOhterCharsubstring抛出:IndexOutOfBoundsException-如果beginIndex为负数,或者endIndex大于此字符串对象的长度,或者beginIndex大于endIndex。
        int startUsnm = logindat.indexOf(usnm);
        int tendUsnm = logdat.indexOf(':');
        int endUsnm = startUsnm + tendUsnm;
        int startPass = endUsnm + 1;
        int tendPass = logdat.indexOf('.');
        int endPass = startPass + tendPass;
        String Usnm = logindat.substring(startUsnm, endUsnm);
        String Pass = logindat.substring(startPass, endPass);