我有一个文件sample.txt,其内容将是
12345#ABCDEF#12345#ADCDE
12345#ABCDEF#12345#ADCDE
FHJI
KLMN
OPQ
12345#ABCDEF#12345#ADCDE
现在我想根据#
拆分/解析文件我的输出应该是
Test1 : 12345
Test2 : ABCDEF
Test3 : 12345
Test4 : ADCDE
Test1 : 12345
Test2 : ABCDEF
Test3 : 12345
Test4 : ADCDE
FHJI
KLMN
OPQ
Test1 : 12345
Test2 : ABCDEF
Test3 : 12345
Test4 : ADCDE
我写的如下
String sCurrentLine;
String Test1, Test2, Test3, Test4 = "";
br = new BufferedReader(new FileReader("D:\\sample.txt"));
while ((sCurrentLine = br.readLine()) != null) {
String line[] = sCurrentLine.split("#");
Test1 = line[0];
Test2 = line[1];
Test3 = line[2]
Test4 = line[3];
System.out.println(Test1+"\n"+Test2+"\n"+Test3+"\n"+Test4);
}
如果它只有一行就可以工作了 或者sample.txt在下面
12345#ABCDEF#12345#ADCDE
12345#ABCDEF#12345#ADCDE
它不适用于最高声明的示例。
请帮帮我。
谢谢。
答案 0 :(得分:1)
这一行
String line[] = sCurrentLine.split("#");
如果您解析的行中没有n
将崩溃,则会将字符串拆分为#
个片段。为了解决问题,您有两个选择:
在分配之前检查数组的长度以避免AIOOBE
while ((sCurrentLine = br.readLine()) != null) {
String line[] = sCurrentLine.split("#");
Test1 = line[0];
Test2 = line.lenght > 1 ? line[1] : "";
Test2 = line.lenght > 2 ? line[2] : "";
Test2 = line.lenght > 3 ? line[3] : "";
System.out.println(Test1+"\n"+Test2+"\n"+Test3+"\n"+Test4);
}
答案 1 :(得分:1)
您必须检查是否可以将字符串拆分为您想要的部分
String sCurrentLine;
String Test1 = "";
String Test2= "";
String Test3= "";
String Test4 = "";
br = new BufferedReader(new FileReader("D:\\sample.txt"));
while ((sCurrentLine = br.readLine()) != null) {
String line[] = sCurrentLine.split("#");
if (line.length >= 4) {
Test1 = line[0];
Test2 = line[1];
Test3 = line[2]
Test4 = line[3];
} else {
Test4 = line[0] + "\n";
}
System.out.println(Test1+"\n"+Test2+"\n"+Test3+"\n"+Test4);
}
答案 2 :(得分:0)
执行类似的操作,检查字符串中是否有足够的段。
String sCurrentLine;
String Test1, Test2, Test3, Test4 = "";
br = new BufferedReader(new FileReader("D:\\sample.txt"));
while ((sCurrentLine = br.readLine()) != null) {
String line[] = sCurrentLine.split("#");
if(line.length >= 4){
Test1 = line[0];
Test2 = line[1];
Test3 = line[2]
Test4 = line[3];
}
System.out.println(Test1+"\n"+Test2+"\n"+Test3+"\n"+Test4);
}