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

如何将字符串中单引号外的内容转为大写并去除多余空格?

解决方案

核心思路是区分单引号内部和外部的内容分别处理:单引号内的文本完全保留原样,单引号外的文本先移除多余空格,再转为大写。

Java 实现代码

public class StringTransformer {
    public static void main(String[] args) {
        String original = "Rule2 = if(event = 'Veteran''s Day', 'Day 1', 'Day 2', Measure1.Lag)";
        StringBuilder result = new StringBuilder();
        
        // 正则匹配:要么是单引号包裹的内容(含转义的双单引号),要么是非单引号内容
        java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("('(?:''|[^'])*')|([^']+)");
        java.util.regex.Matcher matcher = pattern.matcher(original);
        
        while (matcher.find()) {
            if (matcher.group(1) != null) {
                // 单引号内的内容直接追加
                result.append(matcher.group(1));
            } else {
                // 单引号外的内容:按需求移除多余空格后转大写
                String part = matcher.group(2)
                    .replaceAll("\\s*=\\s*", "=")
                    .replaceAll("\\s*\\(\\s*", "(")
                    .replaceAll("\\s*,\\s*'", ",'")
                    .replaceAll(",\\s+", ", ")
                    .toUpperCase();
                result.append(part);
            }
        }
        
        System.out.println("myString = \"" + result.toString() + "\"");
    }
}

细节说明

  1. 正则表达式解析:('(?:''|[^'])*')|([^']+)
    • '(?:''|[^'])*':精准匹配单引号包裹的内容,支持内部的双单引号(转义写法),比如'Veteran''s Day'会被完整保留。
    • ([^']+):匹配所有不在单引号内的文本片段。
  2. 空格处理逻辑:
    • 移除=两边的所有空格,转为RULE2=、EVENT=的形式;
    • 移除(前后的空格,转为IF(的形式;
    • 移除逗号与单引号之间的空格,转为,'Day 1'的形式;
    • 保留逗号与标识符之间的单个空格,转为, MEASURE1.LAG的形式;
    • 最后将所有单引号外的文本转为大写。

运行代码后会得到与你示例完全一致的输出:

myString = "RULE2=IF(EVENT='Veteran''s Day','Day 1','Day 2', MEASURE1.LAG)"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:34:50