我读了一个看起来像这样的文本文件:
operationName1 Value
行数可变,具有不同的操作和相应的值。我可以读取文件并获取2D String数组作为输出。这是我的代码。
try{
Path path = Paths.get("./myFile.txt");
String[][] array = Files.lines(path)
.map(s -> s.split("\\s+", 2))
.map(a -> new String[]{a[0], a[1]})
.toArray(String[][]::new);
}catch(IOException e){
}
问题:如何更改我的代码以获取2d int数组,其中operationName1为“0”且operationName2为“1”(只有两个可能的操作,每个操作由特定字符串定义)?< / p>
此文本文件:
operationOne 5
OtherOp 999
operationOne 8
operationOne 2
将成为2d int数组:
[[0,5],[1,999],[0,8],[0,2]]
指数也很重要。所以文本文件的第一行是我的数组的第一行。
PS:如果有更好的语法(更新的语法),我愿意接受建议。
非常感谢。
答案 0 :(得分:4)
如果您需要parallelism? ......这可能是一种方法
AtomicInteger atomicInteger = new AtomicInteger(0);
Map<String, Integer> known = new ConcurrentHashMap<>();
Path path = Paths.get("./myFile.txt");
int[][] array = Files.lines(path)
.map(s -> s.split("\\s+", 2))
.map(a -> new int[]{
known.computeIfAbsent(a[0],
k -> atomicInteger.getAndIncrement()),
Integer.parseInt(a[1])
})
.toArray(int[][]::new);
答案 1 :(得分:1)
我通常使用Scanner类来读取文本文件
ArrayList<String[]> array = new ArrayList();
Scanner scan= new Scanner(new File("./myFile.txt"));
String str;
String auxiliary= new String[2];
while(scan.hasNextLine()){
str= scan.readLine();
auxiliary=str.split(" "); // you can use also the \\s
for(int i=0; i<array.size();i++){
if(array.get(i)[0].equals(auxiliary[0])){
String aux2[]={i,auxiliary[1]};
break;
}
}
String aux2[]={array.size,auxiliary[1]};
}
我希望它有所帮助。
#编辑:纠正了一些问题
答案 2 :(得分:1)
它有点长,但它允许你去operationName1 ... operationNameN
我总是尽量保持代码清洁,所以如果您有任何问题,请询问
user.registered = new Date(json.registered);