Java正则表达式实现移除首尾4040并适配三种场景
Java正则移除字符串首尾"4040"的解决方案
你之前用的^(4040)*|(4040)*$替换为空的方式,问题出在当字符串全是奇数个"4040"时,所有首尾的匹配项都会被清空,没法保留最后一个"4040"。要覆盖三种场景,咱们可以分情况处理:
处理逻辑
- 先判断字符串是否完全由"4040"重复组成:
- 若是,统计重复次数:奇数次数返回"4040",偶数次数返回空字符串
- 其他情况(字符串包含非"4040"内容):直接用原正则移除首尾所有"4040"对,保留中间内容
Java代码实现
public class Remove4040Handler { public static String trim4040(String input) { // 匹配全由"4040"重复的情况 if (input.matches("^(4040)+$")) { int repeatCount = input.length() / 4; // 每个"4040"占4个字符 return repeatCount % 2 == 1 ? "4040" : ""; } // 移除首尾所有"4040" return input.replaceAll("^(4040)*|(4040)*$", ""); } public static void main(String[] args) { // 测试场景1:偶数个"4040" System.out.println(trim4040("4040404040404040")); // 输出空字符串 // 测试场景2:首尾带"4040",中间有其他内容 System.out.println(trim4040("4040StackOverFlow40404040")); // 输出"StackOverFlow" // 测试场景3:奇数个"4040" System.out.println(trim4040("404040404040")); // 输出"4040" // 测试无首尾"4040"的情况 System.out.println(trim4040("HelloJava")); // 输出"HelloJava" // 测试单个"4040" System.out.println(trim4040("4040")); // 输出"4040" } }
为什么分两步更靠谱
直接用单一正则很难同时兼顾三种场景,尤其是全奇数个"4040"的情况——正则的贪婪匹配会把所有"4040"都吃掉。先单独判断全重复的情况,再处理混合内容的场景,逻辑更清晰,也不容易出问题。
内容的提问来源于stack exchange,提问作者Deep Ghodasara
相关产品推荐
相关产品推荐

