Java 如何获取压缩文件(通过索引)并重新创建原始文件?(爪哇)

Java 如何获取压缩文件(通过索引)并重新创建原始文件?(爪哇),java,hashmap,compression,hashtable,Java,Hashmap,Compression,Hashtable,问题背景 我一直在开发一些代码,重点是首先读取字符串和创建文件。其次,将字符串拆分为数组。然后获取数组中每个单词的索引,最后删除重复项并将其打印到不同的文件中。 我目前已经为这是一个链接(也有一个菜单系统)的代码,但它相当长,所以我在这个问题上没有实现它 压缩方法通过hashmaps完成,获取数组的索引并将它们映射到相关的单词。以下是一个例子: 原文:“大海见大海见大海” 输出:见[2,4,5],sea[0,1,3] 问题 下一步是将输出恢复到原始状态。我目前对java比较陌生,所以我不知道所需

问题背景

我一直在开发一些代码,重点是首先读取字符串和创建文件。其次,将字符串拆分为数组。然后获取数组中每个单词的索引,最后删除重复项并将其打印到不同的文件中。 我目前已经为这是一个链接(也有一个菜单系统)的代码,但它相当长,所以我在这个问题上没有实现它

压缩方法通过hashmaps完成,获取数组的索引并将它们映射到相关的单词。以下是一个例子:

原文:“大海见大海见大海”

输出:见[2,4,5],sea[0,1,3]

问题

下一步是将输出恢复到原始状态。我目前对java比较陌生,所以我不知道所需的技术。代码应该能够获取输出文件(如上所示)并将其放回原始文件中

我目前的想法是,您只需重写这个hashmap(如下)。我这样想对吗?我想我应该先检查一下堆栈溢出

Map<String, Set<Integer>> seaMap = new HashMap<>(); //new hashmap
                    for (int seaInt = 0; seaInt < sealist.length; seaInt++) {
                        if (seaMap.keySet().contains(sealist[seaInt])) {
                            Set<Integer> index = seaMap.get(sealist[seaInt]);
                            index.add(seaInt);
                        } else {
                            Set<Integer> index = new HashSet<>();
                            index.add(seaInt);
                            seaMap.put(sealist[seaInt], index);
                        }                
                    }
                    System.out.print("Compressed: ");
                    seaMap.forEach((seawords, seavalues) -> System.out.print(seawords + seavalues + ","));
                    System.out.println("\n");
Map seaMap=newhashmap()//新哈希映射
对于(int-seaInt=0;seaIntSystem.out.print(seawords+seavalues+“,”);
System.out.println(“\n”);
如果有人有任何好的想法/答案,请让我知道,我真的非常渴望一个解决方案


链接到当前代码:

首先,您必须使用您的示例将带有索引的单词从压缩行中分离出来:

"see[2, 4, 5],sea[0, 1, 3],"
要获取以下字符串:

"see[2, 4, 5]" and "sea[0, 1, 3]"
对于每一项,您必须读取索引,例如,对于第一项:

2, 4 and 5

现在只需在给定索引处将单词写入ArrayList(或数组)

对于前两个步骤,可以使用正则表达式查找每个单词和索引列表。然后使用String.split和Integer.parseInt获取所有索引

Pattern pattern = Pattern.compile("(.*?)\\[(.*?)\\],");
String line = "see[2, 4, 5],sea[0, 1, 3],";
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
    String word = matcher.group(1);
    String[] indexes = matcher.group(2).split(", ");
    for (String str : indexes) {
        int index = Integer.parseInt(str);

现在只需检查结果列表是否足够大,并在找到的索引处设置单词

您知道如何将索引和单词组合在一起吗?“在给定索引处的ArrayList(或数组)中写入单词”和“检查结果列表是否足够大,并在找到的索引处设置单词”,然后将字符串
result[0]+result[1]+…
(显然是在循环中或使用流)--我只是想告诉你主要的想法,别指望我做你的工作,我自己已经做得够多了!