复杂印刷声明

时间:2019-04-25 06:26:37

标签: json java-8 jackson

到目前为止,我所拥有的:

具有两个文件夹的目录:

  1. .. \ Data \ BeforeModern

  2. .. \ Data \ AfterModern

每个文件夹(BeforeModern和AfterModern)分别有4个JSON文件( AU,UK,US,IND );

Json 文件包含一个我感兴趣的特定字段名(语言)。

例如,在BeforeModern中的AU JSON中,lan​​g是

Language["English","Spanish"]

在AFterModern中,lan​​g就像这样:

Language["English","Spanish","Arabic"]

我要打印如下结果:

         **BeforeModern**            **AfterModern**
            English                     English
AU :        Spanish                     Spanish
                                        Urdu

直到现在我的方法:

for (File beforeFile: new File(locationPath).listFiles()) {
            File afterFile= new File(locationPath.replace("BeforeModern", "AfterModern") + "\\" + locFile.getName());

            if (afterfile.exists()) {
                ObjectMapper mapper = new ObjectMapper();
                JsonNode tree1 = mapper.readTree(beforeFile); //Parse Specific JSON from BeforeModern Location
                JsonNode tree2 = mapper.readTree(afterFile); //Parse Specific JSON from AfterModern Location
                if (tree1.has("Language") && tree2.has("Language")) {
                    JsonNode sup_loc = tree1.get("Language");
                    List<String> list1 = new ArrayList<>();
                    sup_loc.forEach(l -> list1.add(l.asText()));
                    JsonNode sup_rent = tree2.get("Language");
                    List<String> list2 = new ArrayList<>();
                    sup_rent.forEach(l -> list2.add(l.asText()));
                    int rows = Math.max(list1.size(), list2.size());


                    Map<String, String> hash= new HashMap<>();
                    for (int i=0;i<rows;i++){
                        hash.put(list1.get(i),list2.get(i));
                    }
                    Map<String,Map<String,String>> map = new HashMap<>();
                    map.put(beforeFile.getName(),hash);
                    map.entrySet().forEach((k)->System.out.println(k.getKey()+"                                                "+k.getValue()));
                    //hash.entrySet().forEach((k)->System.out.println(k.getKey()+"                         "+k.getValue()));
                    System.out.println("________________________________________________________________________________");

1 个答案:

答案 0 :(得分:1)

要在语言列表的中间行上打印AU :,需要计算中间行的索引。

为了将两个语言名称列表打印为列,您需要在第一列中找到最长的语言名称的长度,该列的标题为**BeforeModern**。然后,您可以使用类printf()的方法PrintStream来确保**AfterModern**列表也显示为一列。在下面的代码段中,longest是代表最长语言名称长度的int,而before是在第一列中包含语言名称的String 1}}是after,代表第二列中的相应语言名称。

String

并通过循环打印列表,以便您知道何时打印System.out.printf("%-" + longest + "s %s%n", before, after); 。在下面的代码中,AU :是一个maxLines,这是两个语言名称列表中较大者的元素数,而int是一个包含以下内容的索引的middle:需要打印int的行。

AU :