Java charAt()调用中的StringIndexOutOfBoundsException
我是新的编码,我正试图使一个程序,匹配两个文本文件。对于第一行,我匹配第一个字符,第二行匹配两个字符,依此类推,直到其中一个文件结束 问题就在这里。如果该行没有足够的字符,您只能比较出现的字符,如果两行99都有abc,则将其视为匹配 如果不抛出一个错误,我似乎无法满足这个要求,因为如果字符数小于行数,charAt读取的是null。谢谢你的帮助 代码:Java charAt()调用中的StringIndexOutOfBoundsException,java,file,char,indexoutofboundsexception,Java,File,Char,Indexoutofboundsexception,我是新的编码,我正试图使一个程序,匹配两个文本文件。对于第一行,我匹配第一个字符,第二行匹配两个字符,依此类推,直到其中一个文件结束 问题就在这里。如果该行没有足够的字符,您只能比较出现的字符,如果两行99都有abc,则将其视为匹配 如果不抛出一个错误,我似乎无法满足这个要求,因为如果字符数小于行数,charAt读取的是null。谢谢你的帮助 代码: 在超过行的最后一个字母末尾调用char之前,需要检查行1和行2的长度与i变量的关系 类似于ifline1.length
在超过行的最后一个字母末尾调用char之前,需要检查行1和行2的长度与i变量的关系 类似于ifline1.length
首先检查两行的长度是否相等,如下所示,并将变量work更改为布尔值而不是字符串。它有助于提高性能,因为boolean需要1个字节和字符串
if (line1.length() > line2.length()) {
work = false;
} else if (line1.length() < line2.length()) {
work = false;
} else if (line1.charAt(i) != line2.charAt(i)) {
work = false;
} else {
work = true;
}
或:
然后
但是如果您真的想/需要使用work变量作为字符串,那么不要将其与==进行比较,而是与work.equals或.equalswork进行比较。第二个变量可以防止NullPointerException
阅读更多关于,以及。大约
此外,如果在任何位置,两行在任何字母处不匹配,您可能希望中断或继续循环。不要使用ifline1.charAti!=line2.charAti,使用ifline1.charAti.equalsline2.charAti@Sekula1991 It primitive types.so==是fine您必须检查charAt的结果是否为null,然后进行相应的处理
if (line1.length() > line2.length()) {
work = false;
} else if (line1.length() < line2.length()) {
work = false;
} else if (line1.charAt(i) != line2.charAt(i)) {
work = false;
} else {
work = true;
}
if (line1.length() != line2.length()) {
work = false;
} else {
work = true;
}
if (line1.length() == line2.length()) {
work = true;
} else {
work = false;
}
if(work) {//This is the same as if (work == true)
System.out.println("Line # " + line + ": Matching " + line + " character/s true " + "**" + line1 + "**" + " and " + "**" + line1 + "**");
} else {
System.out.println("Line # " + line + ": Matching " + line + " character/s false " + "**" + line1 + "**" + " and " + "**" + line2 + "**");
}