使用ArrayLists和HashMaps在java中实现紧凑的拆分和新行操作



我仍在开发这段代码,我正在寻找以高效和紧凑的方式实现这一点的想法,因为我打算将其嵌入到一个单独的java代码中。我也对其他方法持开放态度,尽管我更喜欢HashMap或ArrayList方法

我有一个正在处理的文件,看起来像这样:

053 100% BRAN       A0 B1 C01 E0
054 100% NATURAL    A0 B1 C01 E0 F0 G0    

该代码的最终产品必须看起来像

053 016% BRAN       A0 
053 100% BRAN       B1 
053 100% BRAN       C01 
053 100% BRAN       E0 
054 100% NATURAL    A0
054 100% NATURAL    B1 
054 100% NATURAL    C01 
054 100% NATURAL    E0 
054 100% NATURAL    F0 
054 100% NATURAL    G0 

请注意,这个文件很大。所有列以制表符分隔,最后一列以空格分隔元素。

编辑:很抱歉,我本应该把我的问题写得更好。我之所以考虑集合,是因为在这样做之后,我需要能够使用不同的键(第一列的重复值(访问所有行。

如果模式是固定的,那么这可以使用RegEx来完成。get();将每一行作为输入,并返回该输入字符串的所有组合列表

public static void main(String[] args) {
String input="053 100% BRAN       A0 B1 C01 E0";            
System.out.println(get(input));     
}
public static List<String> get(String input){
List<String> list = new ArrayList<String>();
String regEx="((?:\d*)\s(?:\d*)%\s(?:[A-Z]*))([\s]*)([\sA-Z0-9]*)";
Matcher matcher = Pattern.compile(regEx).matcher(input);            
String firstHalf="";
String codes="";
if(matcher.matches()) { 
firstHalf=matcher.group(1)+matcher.group(2);
codes=matcher.group(3);
}
for (String code : codes.split("\s")) {
list.add(firstHalf+code);           
}

return list;
}

根本不清楚为什么需要集合。只需操纵字符串:

for (String line : input) {
String prefix = line.substring(0, 20);  // Or however you decide on the line prefix.
String suffix = line.substring(20);
for (String part : suffix.split(" ")) {
System.out.printf("%s%s%n", prefix, part);
}
}

通过使用PrintWriter来避免显式构造子字符串/拆分数组,可以更有效地执行此操作。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Test {  
public static void main (String[] args){
List<String[]> myList = new ArrayList<>();
//read each line of your file and split it by s+
try (Stream<String> stream = Files.lines(Paths.get("C:\temp\xyz.txt"))) {
stream.forEach( line->{
String[] splited = line.split("\s+");
//iterate from 4th element of your splited array to last
//and add the first three elements and the ith element to your list
for(int i = 3; i<splited.length; i++){
myList.add(new String [] {splited[0] ,splited[1], splited[2], splited[i]});                    
}
});
} catch (IOException ex) {
ex.printStackTrace();
}
//print or do other stuff with your list
myList.forEach(e->{System.out.println(Arrays.toString(e));});
} 
}

相关内容

  • 没有找到相关文章

最新更新