
本文介绍了如何利用字符及其在字符串中的索引位置信息,通过 Java 集合和流操作,高效地重建原始字符串,包括处理空格的情况。我们将探讨如何使用 Map 存储字符索引,并利用 Stream API 进行排序、映射和收集,最终恢复原始字符串。
在许多文本处理场景中,我们可能需要知道字符串中每个字符的位置。Java 的 Map 接口提供了一种方便的方式来存储字符及其对应的索引列表。以下代码展示了如何创建一个 Map,其中键是字符(String 类型),值是该字符在字符串中出现的所有索引位置的 List<Integer>:
import java.util.*;
import java.util.stream.Collectors;
public class StringReconstruction {
private static final String text = "Hello Word!";
static Map<String, List<Integer>> charsIndex = new HashMap<>();
static void charsIndex() {
List<Character> charsList = text
.chars()
.mapToObj(e -> (char) e)
.toList();
System.out.println(charsList);
int position = 0;
for (Character c : charsList) {
if(!c.toString().isBlank()){
charsIndex.computeIfAbsent(c.toString(),
addCharPosition -> new ArrayList<>()).add(position);
}
position += 1;
}
System.out.println(charsIndex);
}这段代码首先将字符串转换为字符列表,然后遍历该列表,记录每个字符的位置。charsIndex.computeIfAbsent 方法确保如果 Map 中不存在某个字符的键,则创建一个新的 ArrayList 来存储其索引。
有了字符索引映射后,下一步就是利用这些信息重建原始字符串。为了实现这一点,我们需要:
立即学习“Java免费学习笔记(深入)”;
以下是实现这些步骤的 Java 代码:
public record CharPosition(String ch, int pos) {}
static void charsToString() {
List<CharPosition> charPositions = charsIndex.entrySet().stream()
.flatMap(entry -> entry.getValue().stream()
.map(pos -> new CharPosition(entry.getKey(), pos))
)
.sorted(Comparator.comparingInt(CharPosition::pos))
.toList();
int wordLen = charPositions.get(charPositions.size() - 1).pos() + 1;
String[] word = new String[wordLen];
charPositions.forEach(c -> word[c.pos()] = c.ch());
String result = Arrays.stream(word)
.map(str -> Objects.requireNonNullElse(str, " "))
.collect(Collectors.joining());
System.out.println(result);
}
public static void main(String[] args) {
charsIndex();
charsToString();
}这段代码使用了 Java 16 的 record 类型来简化 CharPosition 的定义。flatMap 操作将 Map 中的每个条目转换为 CharPosition 对象的流,然后将所有流连接成一个流。sorted 操作按照位置对 CharPosition 对象进行排序。最后,Arrays.stream 和 Collectors.joining 将字符串数组转换为最终的字符串,并用空格替换 null 值。
通过本教程,我们学习了如何使用 Java 集合和流操作,从字符索引映射重建原始字符串。这种方法可以用于各种文本处理场景,例如恢复被分割的字符串或处理包含位置信息的文本数据。掌握这些技术可以帮助您编写更高效、更灵活的 Java 代码。
以上就是从字符索引映射重建字符串:Java 教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号