我有一个文本文件,如下所示:
ExampleA1
ExampleA1b
ExampleA2
ExampleA2b
ExampleA3
ExampleA3b
有人可以帮助我将其转换为逗号分隔格式,例如:
ExampleA1, ExampleA1b
ExampleA2, ExampleA2b
ExampleA3, ExampleA3b
感谢您的帮助
答案 0 :(得分:0)
我可能会使用这样的东西
File f = new File("temp/file.txt");
if (!f.exists()) {
return;
}
Scanner scanner = null;
List<String> al = new ArrayList<String>();
try {
scanner = new Scanner(f);
while (scanner.hasNextLine()) {
String line1 = scanner.nextLine().trim();
if (line1.length() == 0) {
continue;
}
String line2 = "";
if (scanner.hasNextLine()) {
line2 = scanner.nextLine().trim();
}
if (line2.trim().length() > 0) {
al.add(line1 + ", " + line2);
} else {
al.add(line1);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
scanner.close();
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(f, false);
PrintWriter pw = new PrintWriter(fos);
for (String str : al) {
pw.println(str);
}
pw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
}
}
}
从
开始cat file.txt
ExampleA1
ExampleA1b
ExampleA2
ExampleA2b
ExampleA3
ExampleA3b
我用上面的
得到了这个ExampleA1, ExampleA1b
ExampleA2, ExampleA2b
ExampleA3, ExampleA3b
答案 1 :(得分:0)
乍一看似乎非常容易,但仔细观察后就不那么容易了:)以下是答案:
public static void main(String[] args) {
try {
FileInputStream fin = new FileInputStream("/home/venkatesh/Desktop/test.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
int data = -1;
int prevChar = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
do {
data = reader.read();
if (data == -1) break;
if (data == '\n') {
if (prevChar == '\n') {
baos.write('\n');
prevChar = 0;
} else {
prevChar = data;
}
} else {
if (prevChar == '\n') {
baos.write(',');
baos.write(' ');
}
baos.write(data);
prevChar = data;
}
} while (true);
System.out.println(" Written Text : \n" + new String(baos.toByteArray()));
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
简要说明:我们在此执行以下操作:
1。通过FileInputStream打开文件,然后由选择的Reader包装它。打开一个Outpustream(我在这里使用了ByteArrayOutputStream来记录简单性)。
2。使用read()API读取char并查看几个特定于应用程序的条件 -
一个。如果currentReadChar是新行char(\ n)并且之前没有找到新行char,则只跳转到下一个char(不要向输出流写任何内容)
湾如果currentReadChar是newline char而previous也是newline char,那么写一个换行符而不是两个,然后conintue到next char。
℃。如果currentReadChar不是换行符char而且previous是一个换行符char,则在写入当前char之前向流写入','
d。如果currentReadChar不是换行符,而前一个不是换行符,则写入当前的char。
3。关闭流/阅读器,并根据需要使用生成的输出流/字符串。
基本假设:
1。 ExampleA1和ExampleA1b之间只有一个新的行char
2。下一组ExampleA之间有两个新的行号...
希望这会有所帮助...