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

Java处理冒号分隔字符串 如何实现相邻重复字符仅保留一次

Java字符串去重问题修复方案

你代码里的几个硬伤

  • 变量重名冲突:循环外先定义了int i = 0,后面增强for循环又用String i当遍历变量,作用域混乱直接导致运行逻辑异常。
  • 判断逻辑完全写偏:i.equals(i+1)里的i+1根本不是你以为的「数组下一个元素」,是把当前字符串和数字1做拼接——比如i是"w"的时候,i+1算出来是"w1",永远不可能和"w"相等,判断从根上就失效了,这也是你输出奇怪null值的核心原因。
  • 遍历方式选的不对:增强for循环只能逐个拿当前遍历到的元素,没法直接取相邻位置的元素,要做相邻对比得用带索引的普通for循环。
  • 边界没处理:你输入的字符串里有连续两个冒号pp::rr,直接split(":")会切出空字符串,虽然拼接时空串不影响结果,但属于漏考虑的边界情况。

最简单的修复方式(适配当前题目输入)

直接把冒号全替换掉比split再拼接省事,遍历的时候只需要判断当前字符和结果里最后一个字符是不是一样,不一样就加进去就行,不会出现索引越界:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        String txt = "ww:ii:pp::rr:oo";
        // 一步替换掉所有冒号,不用先split再循环拼接
        String pureStr = txt.replace(":", "");
        System.out.println(pureStr);
        String[] charArr = pureStr.split("");
        System.out.println(Arrays.toString(charArr));

        StringBuilder res = new StringBuilder();
        for (int idx = 0; idx < charArr.length; idx++) {
            String current = charArr[idx];
            // 第一个字符直接加,后面的字符和结果末尾的字符不一样才加
            if (idx == 0 || !current.equals(String.valueOf(res.charAt(res.length() - 1)))) {
                res.append(current);
            }
        }
        System.out.println(res); // 最终输出wipro
    }
}

通用去重方案(不要求重复字符相邻)

如果后续遇到重复字符不挨在一起的输入,上面的相邻判断就不好用了,可以用LinkedHashSet自动去重还能保留字符出现顺序,逻辑更简单:

import java.util.LinkedHashSet;

public class Test {
    public static void main(String[] args) {
        String txt = "ww:ii:pp::rr:oo";
        String pureStr = txt.replace(":", "");
        LinkedHashSet<String> charSet = new LinkedHashSet<>();
        for (String c : pureStr.split("")) {
            charSet.add(c); // 重复元素加不进去,自动去重
        }
        StringBuilder res = new StringBuilder();
        for (String c : charSet) {
            res.append(c);
        }
        System.out.println(res); // 输出wipro
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:00:51