You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助完成Java字符串差异字符提取程序开发

提取第一个字符串中独有的字符

以下是完整的实现代码,包含输入优化和核心逻辑:

import java.util.*;

public class UniqueCharExtractor {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("Input first string: ");
        String one = sc.nextLine(); // 支持带空格的完整输入
        System.out.print("Input second string: ");
        String two = sc.nextLine();

        // 将第二个字符串的字符存入HashSet,用于快速查找
        Set<Character> secondChars = new HashSet<>();
        for (char c : two.toCharArray()) {
            secondChars.add(c);
        }

        // 收集第一个字符串中独有的字符
        StringBuilder result = new StringBuilder();
        for (char c : one.toCharArray()) {
            if (!secondChars.contains(c)) {
                result.append(c);
            }
        }

        System.out.println("第一个字符串独有的字符:" + result);
        sc.close();
    }
}

关键逻辑说明

  • 输入处理优化:替换sc.next()为sc.nextLine(),这样能读取用户输入的整行内容,包括空格,避免输入带空格的字符串时被截断。
  • 高效查找:用HashSet存储第二个字符串的所有字符,HashSet的contains()方法时间复杂度为O(1),比每次遍历第二个字符串检查字符存在性的效率高得多,尤其适合处理长字符串。
  • 高效拼接结果:使用StringBuilder来拼接符合条件的字符,避免频繁创建String对象带来的性能开销。

适配去重需求

如果需要只显示独有的不重复字符(即重复的独有字符仅保留一次),可以改用LinkedHashSet收集结果,它既能去重,又能维持字符在原字符串中的出现顺序:

// 替换原结果收集部分的代码
Set<Character> uniqueChars = new LinkedHashSet<>();
for (char c : one.toCharArray()) {
    if (!secondChars.contains(c)) {
        uniqueChars.add(c);
    }
}

// 将Set转换为字符串输出
String result = uniqueChars.stream()
                          .map(String::valueOf)
                          .collect(Collectors.joining());
System.out.println("第一个字符串独有的字符(去重):" + result);

注意:使用这个版本需要在代码顶部导入java.util.stream.Collectors。

内容的提问来源于stack exchange,提问作者troy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:25:24