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