读取文本文件并根据Java中的输入转换为2d int数组

时间:2016-03-29 20:10:51

标签: java arrays file java-8

我读了一个看起来像这样的文本文件:

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:如果有更好的语法(更新的语法),我愿意接受建议。

非常感谢。

3 个答案:

答案 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);