我被困住了,对于我的一生,我无法弄清楚为什么我没有将这些数据解析为5个令牌。
我将下面的数据加载到名为test.dat
的文件中:
第1行:1236 ~~ Tier 5 ~~ 54 ~~更新~~ 01/05/2019
Row2:1255934 ~~ Tier 1 ~~ 30 ~~会议系列继续审查期。~~ 8/21/2018
第3行:12556 ~~第1层~~ 30 ~~团队开始在此~~ 8/21/2018
绘制客户危害场景Row4:1255936 ~~ Tier 1 ~~ 30 ~~一周的通话。
截至目前,在测试文件的8月8日(
~~8/21/2018
)结束之前设置的呼叫。
查看此编辑器中的第4行如何显示回车?在我的文件中,没有像这里这样的可见换行符。它必须是隐藏字符。
这似乎是导致问题的原因。我试图将其删除,但似乎无济于事。
这是我的代码:
import java.io.*;
import java.util.*;
class MergeData {
public static void main(String[] args) {
System.out.print("Enter master_file:");
String master = loadFile();
HashMap masterMap = readData(master);
}
public static String loadFile(){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String fileName = new String();
try{
fileName = br.readLine();
System.out.print("opening file... "+ fileName+"\n");
}catch(IOException nfe){
System.err.println("Invalid Format!");
}
return fileName;
}
public static HashMap readData(String file){
HashMap dataMap = new HashMap();
try {
FileReader fileReader = new FileReader(file);
BufferedReader br = new BufferedReader(fileReader);
String line;
int rowCnt = 0;
while ((line = br.readLine()) != null) {
String clean = line.replaceAll("(?:\\n|\\r)", "");
String[] fields = clean.split("~~");
int size = fields.length;
System.out.println("delimiter size:" + size );
rowCnt = rowCnt +1;
String f1 = null;
String f2 = null;
String f3 = null;
String f4 = null;
String f5 = null;
if(size == 5){
f1 = fields[0];
f2 = fields[1];
f3 = fields[2];
f4 = fields[3];
f5 = fields[4];
} else {
System.out.println("!!! INVALID ROW: id---->" + fields[0]);
}
System.out.println(
"rowCnt:" +rowCnt+ " f1:" +f1+ "----f2:" +f2+
"----f3:" +f3+ "----f4:" + f4+ "----f5:" + f5 +"\n\n");
}
br.close();
fileReader.close();
} catch (IOException e) {
System.out.println("\n File Read Error \n" +e );
}
return dataMap;
}
}