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

Java技术问题:如何仅移除指定字符的最大出现次数?

Java实现:移除指定字符的最长连续出现段

需求说明

给定字符串与目标字符,需移除该字符最长的连续出现段,保留其余部分。示例:
输入字符串:567000003460046,目标字符为'0'
输出结果:5673460046
说明:字符'0'存在两段连续出现(长度分别为5和2),移除长度最长的那一段后拼接剩余部分得到结果。

实现思路

  • 遍历字符串,将连续相同字符的片段(含目标/非目标字符)拆分存入列表
  • 在片段列表中定位出长度最大的目标字符连续段
  • 拼接所有片段,跳过上述最长目标字符段,得到最终结果
  • 处理边界场景:空输入、无目标字符、全为目标字符的情况

Java代码实现

import java.util.ArrayList;
import java.util.List;

public class RemoveLongestConsecutiveChar {
    public static String removeLongestConsecutiveChar(String input, char target) {
        if (input == null || input.isEmpty()) {
            return input;
        }

        // 拆分字符串为连续相同字符的片段列表
        List<String> segments = new ArrayList<>();
        StringBuilder currentSeg = new StringBuilder();
        currentSeg.append(input.charAt(0));

        for (int i = 1; i < input.length(); i++) {
            char curr = input.charAt(i);
            if (curr == currentSeg.charAt(0)) {
                currentSeg.append(curr);
            } else {
                segments.add(currentSeg.toString());
                currentSeg = new StringBuilder();
                currentSeg.append(curr);
            }
        }
        segments.add(currentSeg.toString());

        // 找到最长的目标字符连续段的索引
        int maxLen = -1;
        int targetIndex = -1;
        for (int i = 0; i < segments.size(); i++) {
            String seg = segments.get(i);
            if (seg.charAt(0) == target && seg.length() > maxLen) {
                maxLen = seg.length();
                targetIndex = i;
            }
        }

        // 无目标字符时直接返回原字符串
        if (targetIndex == -1) {
            return input;
        }

        // 拼接结果,跳过最长目标字符段
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < segments.size(); i++) {
            if (i != targetIndex) {
                result.append(segments.get(i));
            }
        }

        return result.toString();
    }

    public static void main(String[] args) {
        String testInput = "567000003460046";
        char targetChar = '0';
        System.out.println(removeLongestConsecutiveChar(testInput, targetChar));
        // 输出:5673460046
    }
}

代码说明

  • 片段拆分:通过一次遍历将字符串拆分为连续相同字符的片段,便于后续定位目标字符的连续段
  • 最长段定位:遍历片段列表,筛选出目标字符的片段,记录长度最大的那个的位置
  • 结果拼接:遍历片段列表时跳过最长目标字符段,拼接其余片段得到最终字符串
  • 边界处理:针对空输入、无目标字符的情况直接返回原输入;若全为目标字符,移除后返回空字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:48:35