json - 复杂的打印声明
问题描述
到目前为止我有什么:
一个有两个文件夹的目录:
..\数据\BeforeModern
..\数据\AfterModern
每个文件夹(BeforeModern 和 AfterModern)有 4 个 JSON 文件(AU、UK、US、IND);
Json文件包含我感兴趣的特定字段名(语言)。
例如在 BeforeModern 的 AU JSON 中,lang 是
Language["English","Spanish"]
而在 AFterModern 中,lang 是这样的:
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("________________________________________________________________________________");
解决方案
为了打印AU :
语言列表的中间行,您需要计算中间行的索引。
为了将两个语言名称列表打印为列,您需要在第一列中找到最长的语言名称的长度,其列标题为**BeforeModern**
。然后你可以使用printf()
类的方法PrintStream
来确保**AfterModern**
列表也显示为一列。在下面的代码片段中,longest
aint
表示最长语言名称的长度,并且before
aString
在第一列中包含语言名称,并且在第二列after
中String
表示相应的语言名称。
System.out.printf("%-" + longest + "s %s%n", before, after);
并通过循环打印列表,以便您知道何时打印AU :
. 在下面的代码中,maxLines
是int
两个语言名称列表中较大的一个中的元素数,并且middle
是包含需要打印int
的行的索引。AU :
for (int i = 0; i < maxLines; i++) {
if (middle == i) {
System.out.print("AU : ");
}
else {
System.out.print(" ");
}
}
推荐阅读
- jquery - 单选按钮不适用于jquery append?
- node.js - 如何打破 node.js 中的循环?
- python - Anaconda Python:ModuleNotFoundError:没有名为“matlab”的模块
- ios - 无法将视图控制器连接到 Swift 文件
- android-studio - 为什么在mac上重启几次后android studio会发生变化?
- c++ - 对于同一任务,线程切换的等待时间系统地在 0 到 30000 微秒之间
- visual-studio-code - VSCode:是否可以轻松地格式化/着色我自己的“语言”?
- llvm - 获取函数参数的名称
- angularjs - 社交共享 Angularjs 将图像 URL 共享为照片而不是照片链接
- java - 比较答案(不在数组中)