比较 java 中具有不同内容的 2 个文本文件(对于 text1 中的每一行都需要与 text2 中的每一行进行比较)
Comparing 2 text files with different content in java (for each lines in text1 need to compare to each line in text2)
我正在尝试比较两个 .txt 文件(它们的内容),但是当我执行这段代码时,我的应用程序进入了一次循环。我想逐行比较。例如,在 first.txt 中,我有 4 行,而在 second.txt 中,我有 10 行。我想比较一下(来自 first.txt):0 111 1
与 0 111 1
(second.txt) 和 0 112 1
(second.txt)。如您所见,它们具有不同的价值,但来源和目标相同。
因此,从 first.txt 我可以与 second.txt 比较超过 1 次。
有人可以纠正我的错误吗?
我的意思是这个文件:
First.txt
source value target
0 111 1
0 222 2
0 333 3
0 444 4
Second.txt
source value target
0 111 1
0 222 2
0 333 3
0 444 4
1 555 1
2 987 1
0 112 1
0 223 2
0 334 3
0 445 4
这是我的代码:
// create new reader for cs
frCs = new FileReader("nodeCsArr.txt");
lnrCs = new LineNumberReader(frCs);
// create new reader for rs
frRs = new FileReader("nodeRsArr.txt");
lnRs = new LineNumberReader(frRs);
System.out.println("------Read distance Current State-----");
// read distance on Cs
while((strCs=lnrCs.readLine())!=null){
i=lnrCs.getLineNumber();
//edited here
System.out.println("snCs baris ke-: "+i);
stateArray=strCs.split("\t");
//kolomnya
snCs= stateArray[0]; System.out.println("snCs: "+snCs);
dCs= stateArray[1]; //System.out.println("dCs: "+dCs);
tnCs = stateArray[2];
NodeLength=dCs.length(); System.out.println("panjang= "+NodeLength);
System.out.println("------Read distance Random State-----");
// read distance on Rs
if((strRs=lnRs.readLine())!=null){
i=lnRs.getLineNumber();
//edited here
System.out.println("snRs baris ke-: "+i);
stateArray=strRs.split("\t");
//input array--starts opencl here
snRs= stateArray[0]; System.out.println("snRs: "+snRs);
dRs= stateArray[1]; //System.out.println("dRs: "+dRs);
tnRs = stateArray[2];
if ((snCs.equals(snRs))&&(tnCs.equals(tnRs))) {
System.out.println("snCs= "+snCs+" tnCs= "+tnCs+" dcs= "+dCs);
System.out.println("snRs= "+snRs+" tnRs= "+tnRs+" drs= "+dRs);
dTot=0;
for (int j = 0; j < NodeLength; j++) {
if (dCs.toCharArray()[j]==dRs.toCharArray()[j]) {
difBit=0;
}else{
difBit=1;
}
dTot=dTot+difBit;
}
dist=dTot/NodeLength;
System.out.println("different bit= "+dTot);
System.out.println("distance= "+dist);
}
}
}
//lnRs.close();
lnrCs.close();`
我建议使用 Scanner 来读取每一行,即:
import java.util.Scanner;
(...)
Scanner stdin = new Scanner(System.in);
String line = stdin.nextLine();
在两个循环中比较它们(1. A 中的每一行,2. B 中的每一行)- 从 A 获取第一行并与 B 的每一行进行比较直到到达 lineB.length,然后获取第二行 frm A 并与 B 的每一行进行比较,从 A 获取下一行...
这是我的解决方案。我只是在 ArrayList
中逐行读取第一个文件('longer' 或 'shorter' 无关紧要)
然后我将逐行查看第二个文件并比较这些行。
first.txt:
0 111
0 222
0 333
0 444
second.txt:
0 111
0 222
0 333
0 444
1 555
2 987
这里是代码(为了简单起见,只是在主要方法中:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;
public class CompareFiles {
public static void main(String[] args) {
boolean same = true;
Scanner in = null;
try {
in = new Scanner(new FileReader("first.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
ArrayList<String> firstLines = new ArrayList<String>();
while (in.hasNextLine()) {
firstLines.add(in.nextLine());
}
in.close();
try {
in = new Scanner(new FileReader("second.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
int counter = 0;
while (in.hasNextLine()) {
if (counter < firstLines.size()) {
if (!((in.nextLine()).equals(firstLines.get(counter)))) {
same = false;
break;
}
counter++;
} else {
break;
}
}
in.close();
System.out.println(same);
}
}
记住,我只是从文件的开头检查文件是否相同。
所以:
一种
一种
和
一种
乙
一种
一种
会不一样。这实际上取决于您如何定义平等。
我正在尝试比较两个 .txt 文件(它们的内容),但是当我执行这段代码时,我的应用程序进入了一次循环。我想逐行比较。例如,在 first.txt 中,我有 4 行,而在 second.txt 中,我有 10 行。我想比较一下(来自 first.txt):0 111 1
与 0 111 1
(second.txt) 和 0 112 1
(second.txt)。如您所见,它们具有不同的价值,但来源和目标相同。
因此,从 first.txt 我可以与 second.txt 比较超过 1 次。
有人可以纠正我的错误吗?
我的意思是这个文件: First.txt
source value target
0 111 1
0 222 2
0 333 3
0 444 4
Second.txt
source value target
0 111 1
0 222 2
0 333 3
0 444 4
1 555 1
2 987 1
0 112 1
0 223 2
0 334 3
0 445 4
这是我的代码:
// create new reader for cs
frCs = new FileReader("nodeCsArr.txt");
lnrCs = new LineNumberReader(frCs);
// create new reader for rs
frRs = new FileReader("nodeRsArr.txt");
lnRs = new LineNumberReader(frRs);
System.out.println("------Read distance Current State-----");
// read distance on Cs
while((strCs=lnrCs.readLine())!=null){
i=lnrCs.getLineNumber();
//edited here
System.out.println("snCs baris ke-: "+i);
stateArray=strCs.split("\t");
//kolomnya
snCs= stateArray[0]; System.out.println("snCs: "+snCs);
dCs= stateArray[1]; //System.out.println("dCs: "+dCs);
tnCs = stateArray[2];
NodeLength=dCs.length(); System.out.println("panjang= "+NodeLength);
System.out.println("------Read distance Random State-----");
// read distance on Rs
if((strRs=lnRs.readLine())!=null){
i=lnRs.getLineNumber();
//edited here
System.out.println("snRs baris ke-: "+i);
stateArray=strRs.split("\t");
//input array--starts opencl here
snRs= stateArray[0]; System.out.println("snRs: "+snRs);
dRs= stateArray[1]; //System.out.println("dRs: "+dRs);
tnRs = stateArray[2];
if ((snCs.equals(snRs))&&(tnCs.equals(tnRs))) {
System.out.println("snCs= "+snCs+" tnCs= "+tnCs+" dcs= "+dCs);
System.out.println("snRs= "+snRs+" tnRs= "+tnRs+" drs= "+dRs);
dTot=0;
for (int j = 0; j < NodeLength; j++) {
if (dCs.toCharArray()[j]==dRs.toCharArray()[j]) {
difBit=0;
}else{
difBit=1;
}
dTot=dTot+difBit;
}
dist=dTot/NodeLength;
System.out.println("different bit= "+dTot);
System.out.println("distance= "+dist);
}
}
}
//lnRs.close();
lnrCs.close();`
我建议使用 Scanner 来读取每一行,即:
import java.util.Scanner;
(...)
Scanner stdin = new Scanner(System.in);
String line = stdin.nextLine();
在两个循环中比较它们(1. A 中的每一行,2. B 中的每一行)- 从 A 获取第一行并与 B 的每一行进行比较直到到达 lineB.length,然后获取第二行 frm A 并与 B 的每一行进行比较,从 A 获取下一行...
这是我的解决方案。我只是在 ArrayList
中逐行读取第一个文件('longer' 或 'shorter' 无关紧要)然后我将逐行查看第二个文件并比较这些行。
first.txt:
0 111
0 222
0 333
0 444
second.txt:
0 111
0 222
0 333
0 444
1 555
2 987
这里是代码(为了简单起见,只是在主要方法中:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;
public class CompareFiles {
public static void main(String[] args) {
boolean same = true;
Scanner in = null;
try {
in = new Scanner(new FileReader("first.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
ArrayList<String> firstLines = new ArrayList<String>();
while (in.hasNextLine()) {
firstLines.add(in.nextLine());
}
in.close();
try {
in = new Scanner(new FileReader("second.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
int counter = 0;
while (in.hasNextLine()) {
if (counter < firstLines.size()) {
if (!((in.nextLine()).equals(firstLines.get(counter)))) {
same = false;
break;
}
counter++;
} else {
break;
}
}
in.close();
System.out.println(same);
}
}
记住,我只是从文件的开头检查文件是否相同。 所以: 一种 一种 和 一种 乙 一种 一种 会不一样。这实际上取决于您如何定义平等。