用java读取文件中的值并做比较,发现竟然不一样!!这让我当时百思不得其解,还以为是IDEA出现了问题呢
话不多说看代码
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class MatchingData {
private static ArrayList<String> bankfin = new ArrayList<>();
public static void main(String[] args) {
ArrayList<String> banksall = readFileByLines("C:\\Users\\EDZ\\Desktop\\banks.txt");
HashMap<String, String> bankallMap = new HashMap<>();
for (int n = 0; n<banksall.size();n++){
String[] split = banksall.get(n).split(",");
bankallMap.put(split[1],split[0]);
}
ArrayList<String> banksli = readFileByLines("C:\\Users\\EDZ\\Desktop\\littlebank.txt");
for (int i = 0 ;i<banksli.size();i++){
//将少数银行数据的表 通过,切割
String[] bankslittle = banksli.get(i).split(",");
String aa = bankslittle[0].trim().replaceAll("\\uFEFF","");
System.out.println(aa.length());
String bankname ;
bankname = bankallMap.getOrDefault(aa,"-");
// System.out.println(bankname+".....");
if (bankname.equals("-")){
bankname = bankallMap.getOrDefault(aa.substring(0,aa.length()-1)+"股份有限公司'","-");
// System.out.println(bankname+"/////");
if(bankname.equals("-")){
bankname = (String) bankallMap.getOrDefault((aa.substring(0,aa.length()-1)+"有限责任公司'"),"-");
// System.out.println(bankname+";;;;;;;;;");
if(bankname.equals("-")){
String concat = banksli.get(i).toString().concat(",null");
bankfin.add(concat);
}else{
String bankkey = aa.substring(0, aa.length() - 1) + "有限责任公司',";
String concat= bankkey+ bankslittle[1] + "," + bankallMap.get(bankkey.substring(0,bankkey.length()-1));
bankfin.add(concat);
}
}else {
String bankkey = aa.substring(0, aa.length() - 1) + "股份有限公司',";
String concat= bankkey + bankslittle[1] + "," + bankallMap.get(bankkey.substring(0,bankkey.length()-1));
bankfin.add(concat);
}
}else {
String concat = banksli.get(i).toString().concat("," + bankallMap.get(aa));
bankfin.add(concat);
}
}
writeFileByLines("C:\\Users\\EDZ\\Desktop\\test.txt");
}
public static ArrayList<String> readFileByLines(String fileName) {
File file = new File(fileName);
BufferedReader reader = null;
ArrayList<String> list1 = new ArrayList<>();
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读一行,读入null时文件结束
while ((tempString = reader.readLine()) != null) {
// Thread.sleep(1);
//System.out.println(tempString);
list1.add(tempString);
line++;
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
return list1;
}
}
public static void writeFileByLines(String fileName){
File file = new File(fileName); //存放数组数据的文件
// FileWriter out = null;
BufferedWriter bw =null;
FileOutputStream writerStream = null;
try {
writerStream = new FileOutputStream(file);
bw = new BufferedWriter(new OutputStreamWriter(writerStream, "UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
for(int m = 0;m<bankfin.size();m++){
try {
bw.write(bankfin.get(m));
bw.newLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println( "写入成功");
}
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
打印结果
文件字符串:中国银行
文件字符串长度:5
-------------------------
本身设置字符串:中国银行
本身设置字符串长度:4
最后发现原来是两个文件的编码格式不太一样,一个是UTF8无BOM格式,一个是UTF8格式,这两种格式虽然都是UTF8,但还是有区别的,在Windows下用文本编辑器创建的文本文件,如果选择以UTF-8等Unicode格式保存,会在文件头(第一个字符)加入一个BOM标识(从第二行开始便没有这个BOM标识了)。
解决 :
将utf8的bom格式去掉
s.trim().replaceAll("\uFEFF","");