Java中如何去除重复字符串?重复数字序列去重失败求助
Java去除重复字符串并保留顺序与空格的解决方案
嘿,我来帮你搞定这个问题!针对你输入3 3 2 1想要得到3 2 1的需求,我整理了几种实用的Java实现方式,既能去掉重复项、保留原始顺序,还能维持空格分隔的格式:
方法一:使用LinkedHashSet(最直观的顺序去重)
LinkedHashSet是个绝佳选择——它不仅会自动过滤重复元素,还能严格维持元素的插入顺序,完美匹配你的需求。代码示例如下:
import java.util.Arrays; import java.util.LinkedHashSet; public class DuplicateRemover { public static void main(String[] args) { String input = "3 3 2 1"; // 按空格分割字符串(\\s+能处理多个连续空格的情况,更鲁棒) String[] splitParts = input.split("\\s+"); // 用LinkedHashSet去重并保留顺序 LinkedHashSet<String> uniqueElements = new LinkedHashSet<>(Arrays.asList(splitParts)); // 把去重后的元素用空格拼接回字符串 String output = String.join(" ", uniqueElements); System.out.println(output); // 输出结果:3 2 1 } }
方法二:用Java Stream API(简洁的一行式实现)
如果你习惯用Java 8及以上的Stream特性,这个方法会更简洁。Stream.distinct()方法对于有序流会保留元素第一次出现的顺序,完全符合要求:
import java.util.Arrays; import java.util.stream.Collectors; public class DuplicateRemover { public static void main(String[] args) { String input = "3 3 2 1"; String output = Arrays.stream(input.split("\\s+")) .distinct() .collect(Collectors.joining(" ")); System.out.println(output); // 输出结果:3 2 1 } }
方法三:手动遍历去重(适合基础场景)
如果不想依赖集合或Stream,也可以手动遍历数组,自己维护一个不重复的列表:
import java.util.ArrayList; import java.util.List; public class DuplicateRemover { public static void main(String[] args) { String input = "3 3 2 1"; String[] splitParts = input.split("\\s+"); List<String> uniqueList = new ArrayList<>(); for (String part : splitParts) { // 只添加列表中没有的元素 if (!uniqueList.contains(part)) { uniqueList.add(part); } } String output = String.join(" ", uniqueList); System.out.println(output); // 输出结果:3 2 1 } }
为什么你之前的方法可能没生效?
如果之前尝试的方法失败,大概率是这两个原因:
- 用了
HashSet去重:它不保证元素的顺序,可能会打乱你想要的3 2 1顺序; - 分割或拼接时处理不当:比如用了
split(" ")但输入里有多个连续空格,导致分割出空字符串;或者拼接时用了错误的分隔符。
内容的提问来源于stack exchange,提问作者Jack Johnson
相关产品推荐
相关产品推荐

