Java 如何重新格式化以下具有动态值的文件信息?
我需要按部门代码分类,部门行也不应重复 例如,本A01中的部门代码是位于末尾的部门代码。该A01值在文件中是动态的 在处理输入文件之后,我们需要发送如下分类的输出文件 输入Java 如何重新格式化以下具有动态值的文件信息?,java,Java,我需要按部门代码分类,部门行也不应重复 例如,本A01中的部门代码是位于末尾的部门代码。该A01值在文件中是动态的 在处理输入文件之后,我们需要发送如下分类的输出文件 输入 COMPANY100~ABCD~SAJED~1~1~1 COMPANY150~200605049829~ ~ ~1~ ~1 DEPART160~N~ABCD~A01 EMP180~N~3~BAKK 5401281~46~D~11 DEPART160~N~ABCD~A02 EMP180~N~3~BAKK 5401282~46~
COMPANY100~ABCD~SAJED~1~1~1
COMPANY150~200605049829~ ~ ~1~ ~1
DEPART160~N~ABCD~A01
EMP180~N~3~BAKK 5401281~46~D~11
DEPART160~N~ABCD~A02
EMP180~N~3~BAKK 5401282~46~D~11
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401283~47~D~11
DEPART160~N~ABCD~K07
EMP180~N~4~BAKK 5401284~48~D~11
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401285~49~D~11
DEPART160~N~ABCD~A02
EMP180~N~3~B081 5401286~49~D~11
DEPART160~N~ABCD~K07
EMP180~N~3~B082 5401287~49~D~11
COMPANY100~ABCD~SAJED~1~1~1
COMPANY150~200605049829~ ~ ~1~ ~1
DEPART160~N~ABCD~A01
EMP180~N~3~BAKK 5401281~46~D~11
DEPART160~N~ABCD~A02
EMP180~N~3~BAKK 5401282~46~D~11
EMP180~N~3~B081 5401286~49~D~11
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401283~47~D~11
EMP180~N~4~BAKK 5401285~49~D~11
DEPART160~N~ABCD~K07
EMP180~N~4~BAKK 5401284~48~D~11
EMP180~N~3~B082 5401287~49~D~11
预期产出
COMPANY100~ABCD~SAJED~1~1~1
COMPANY150~200605049829~ ~ ~1~ ~1
DEPART160~N~ABCD~A01
EMP180~N~3~BAKK 5401281~46~D~11
DEPART160~N~ABCD~A02
EMP180~N~3~BAKK 5401282~46~D~11
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401283~47~D~11
DEPART160~N~ABCD~K07
EMP180~N~4~BAKK 5401284~48~D~11
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401285~49~D~11
DEPART160~N~ABCD~A02
EMP180~N~3~B081 5401286~49~D~11
DEPART160~N~ABCD~K07
EMP180~N~3~B082 5401287~49~D~11
COMPANY100~ABCD~SAJED~1~1~1
COMPANY150~200605049829~ ~ ~1~ ~1
DEPART160~N~ABCD~A01
EMP180~N~3~BAKK 5401281~46~D~11
DEPART160~N~ABCD~A02
EMP180~N~3~BAKK 5401282~46~D~11
EMP180~N~3~B081 5401286~49~D~11
DEPART160~N~ABCD~K06
EMP180~N~4~BAKK 5401283~47~D~11
EMP180~N~4~BAKK 5401285~49~D~11
DEPART160~N~ABCD~K07
EMP180~N~4~BAKK 5401284~48~D~11
EMP180~N~3~B082 5401287~49~D~11
有人能帮我翻译一下代码片段或逻辑吗
谢谢。列出公司值=新建ArrayList();
List<String> companyValues = new ArrayList<>();
TreeMap<String, List<String>> content = new TreeMap<>();
StringTokenizer st = new StringTokenizer(string, delimiter);
String earlierLine = null;
while (st.hasMoreTokens()) {
String line = st.nextToken().trim();
if(line.contains("COMPANY100") || line.contains("COMPANY150")) {
// addCompany
companyValues.add(line);
} else if(line.startsWith("DEPART160")) {
earlierLine = line;
} else {
if (!content.containsKey(earlierLine)) {
content.put(earlierLine, new ArrayList<String>());
}
content.get(earlierLine).add(line);
}
}
StringBuffer sb = new StringBuffer();
for(String companyValue: companyValues) {
sb.append(companyValue);
sb.append(delimiter);
}
for(Map.Entry<String, List<String>> entry : content.entrySet()) {
String key = entry.getKey();
List<String> values = entry.getValue();
sb.append(key);
sb.append(delimiter);
for(String value: values) {
sb.append(value);
sb.append(delimiter);
}
}
sb.toString()
树映射内容=新树映射();
StringTokenizer st=新的StringTokenizer(字符串,分隔符);
字符串earlierLine=null;
而(st.hasMoreTokens()){
字符串行=st.nextToken().trim();
如果(第行包含(“公司100”)|第行包含(“公司150”)){
//阿德公司
公司价值。添加(行);
}否则,如果(第160行开始){
早期线=线;
}否则{
如果(!content.containsKey(earlierLine)){
put(earlierLine,newarraylist());
}
content.get(earlierLine).add(line);
}
}
StringBuffer sb=新的StringBuffer();
for(字符串companyValue:companyValue){
附加(公司价值);
某人附加(定界符);
}
for(Map.Entry:content.entrySet()){
String key=entry.getKey();
列表值=entry.getValue();
某人附加(钥匙);
某人附加(定界符);
for(字符串值:值){
附加(价值);
某人附加(定界符);
}
}
(某人)
逐行读取字符串,如果字符串以DEVICE开头,则将其作为键存储在哈希表中,列表为值,如果键存在,则将下一行添加到其值列表中,否则创建新键并添加下一行。