java - 如何从字符串列表中连接字符串Java
问题描述
我无法将以下格式的字符串列表连接到 csv。
当前列表(从文件中读取的字符串列表)
- 0000
- 0001
- 0002
- 0000
- 0002
- 0000
- 等等...
记录总是有 0000,其他记录是可选的。每一行都是一条记录(实际上是交易记录)。如果缺少 0001/0002 我需要填充空间
我所做的是一个复杂的代码来检查上一行和下一行。例如,如果当前行是 0002,下一行是 0000,则打印连接的字符串。应该有一个更简单的方法,更简单的逻辑。
打印/CSV 文件的所需输出在下面的 html 表中表示,您必须单击运行代码片段
<table style="border-collapse:collapse;border-spacing:0" class="tg"><thead><tr><th style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"><span style="font-weight:bold">record00</span></th><th style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"><span style="font-weight:bold">record01</span></th><th style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"><span style="font-weight:bold">record02</span></th></tr></thead><tbody><tr><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0000</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0001</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0002</td></tr><tr><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0000</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"></td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0002</td></tr><tr><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0000</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0001</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"></td></tr><tr><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0000</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0001</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"></td></tr><tr><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0000</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"></td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0002</td></tr></tbody></table>
我创建的当前java代码:
List<String> collectfilelines = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader("C:\\merged\\Merged.txt"))) {
String line = reader.readLine();
while (line != null) {
collectfilelines.add(line);
line = reader.readLine();
}
} catch (IOException exc) {
System.out.println("problem reading the file" + exc);
}
String records = "";
int i;
int imax = collectfilelines.size();
for (i = 0; i < imax; i++) {
String line = collectfilelines.get(i);
String currentline;
String linenext;
String previousline = null;
if (i >0) {
previousline = collectfilelines.get(i - 1).substring(0,4);
} else {
previousline = collectfilelines.get(i).substring(0,4);
}
if (i < imax-1) {
linenext = collectfilelines.get(i + 1).substring(0,4);
} else {
linenext = "9999";
}
currentline = line.substring(0,4);
if (currentline.equals("0000")) {
records = line;
}
if (currentline.equals("0001") && (linenext.equals("0002"))) {
records = records + " " + line;
}
if (currentline.equals("0001") && ((linenext.equals("0000"))||(linenext.equals("9999")))) {
records = records + " " + line;
System.out.println(records);}
if (currentline.equals("0002")) {
if (previousline.equals("0000")) {
records = records + " " + line;
}
if (previousline.equals("0001")) {
records = records + " " + line;
}
System.out.println(records);
}
}
}
**编辑:**由于某些原因,我在https://coderanch.com/t/734045/java/Complex-array-operation-java-checking#3414904上发布了类似/几乎相同的问题
解决方案
你可以这样做。
static void printCsv(List<String> collectfilelines) {
StringBuilder record = new StringBuilder();
int prevFieldNo = 0;
for (String line : collectfilelines) {
int fieldNo = Integer.parseInt(line.substring(0, 4));
if (fieldNo <= prevFieldNo) {
if (record.length() != 0)
System.out.println(record);
record.setLength(0);
prevFieldNo = 0;
}
for (; prevFieldNo < fieldNo; prevFieldNo++)
record.append(',');
record.append(line);
}
if (record.length() != 0)
System.out.println(record);
}
但是,我强烈建议在生成 CSV 格式的输出时使用 CSV 库,以确保在数据包含逗号时正确编码。
测试
printCsv(Arrays.asList("0000","0001","0002","0000","0002","0000","0001","0000","0001"));
printCsv(Arrays.asList("0000 The", "0001 quick", "0002 brown",
"0000 fox", "0002 jumps", "0005 over", "0009 the",
"0000 lazy", "0001 dog"));
输出
0000,0001,0002
0000,,0002
0000,0001
0000,0001
0000 The,0001 quick,0002 brown
0000 fox,,0002 jumps,,,0005 over,,,,0009 the
0000 lazy,0001 dog
推荐阅读
- python-3.x - 仅使用 Python 解决重复任务
- ios - AMP HTML 动画在 iPad 上的行为不正确
- python - Pandas groupby 累积/滚动总和、平均值和标准
- javascript - 如何从 Promise 访问数据
- python - Keras 预测得到不正确的形状?
- java - 从 obj2 转换或创建 obj1,其中 obj1 和 obj2 扩展相同的抽象类
- python - 将数据框转换为另一个数据框,将复合字符串单元格拆分为单独的行
- node.js - 如何确保在变量赋值之前返回数据(Node.js)
- ssl-certificate - Fetchmail 和服务器证书验证错误:无法获取本地颁发者证书
- entity-framework - 当我使用 Web 部署发布到登台时,为什么我的迁移不会自动执行?