我是编程新手,我正在尝试编写一个匹配两个文本文件的程序。对于第一行,我匹配第一个字符,第二行匹配两个字符,依此类推,直到其中一个文件结束。
这是问题所在。如果该行没有足够的字符,则只比较存在的字符,如果两行99都有"abc",则将其视为匹配。
我似乎无法在不抛出错误的情况下满足这个要求,因为如果字符数少于行数,charAt()将读取null。谢谢你的帮助!
代码:
public static void main(String[] args) throws IOException
{
boolean flag;
File f = new File(args[0]);
Scanner sc = new Scanner(f);
File f2 = new File(args[1]);
Scanner sc2 = new Scanner(f2);
int line = 1;
String t1 = "";
String t2 = "";
String work = "";
while(sc.hasNext() && sc2.hasNext())
{
String line1 = sc.nextLine().toUpperCase();
String line2 = sc2.nextLine().toUpperCase();
line1 = line1.trim();
line2 = line2.trim();
for(int i = 0; i < line; i++)
{
if(line1.charAt(i) != line2.charAt(i))
{
work = "no";
t1 = Character.toString(line1.charAt(i));
t2 = Character.toString(line2.charAt(i));
}
else
{
work = "";
t1 = Character.toString(line1.charAt(i));
t2 = Character.toString(line2.charAt(i));
}
}
if(work == "")
{
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 + "**");
}
line += 1;
}
}发布于 2015-11-07 09:31:50
您需要检查line1和line2的长度与i变量的长度,然后在该行最后一个字母的末尾调用char。
类似于if(line1.length() < i)
String.length()
发布于 2015-11-07 09:45:44
1.检查两行的长度是否相等,如下所示(并将变量work改为boolean而不是String)。这有助于提高性能,因为boolean占用1个字节,而String占用的字节更多。
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 + "**");
}但是,如果你真的想/需要使用work变量作为String,那么不要将其与==进行比较,而是与work.equals("")或"".equals(work) (第二个变量阻止了NullPointerException )进行比较。
阅读有关.equals()、Java == vs equals()和How do I compare Strings in Java的更多信息。关于"".equals(variable) vs variable.equals("")
此外,如果在任何位置这两行在任何字母处都不匹配,您可能想要break或continue您的循环。
https://stackoverflow.com/questions/33578085
复制相似问题