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

Java中从字符串形式的文件内容提取s:message的code属性值

嘿,这个需求用正则表达式来实现会更高效简洁,比手动字符串处理省心多了!我来给你详细讲讲怎么做👇

推荐方案:正则表达式提取

首先,针对你的需求,我们可以写一个健壮的正则表达式,既能处理code=前后的空格,也能兼容标签内的其他属性,还能匹配单/双引号包裹的属性值。

正则表达式说明

我们用这个正则:

<s:message[^>]*?code\s*=\s*["']([^"']+)["']

拆解一下各个部分的作用:

  • <s:message:精准匹配目标标签的开头
  • [^>]*?:非贪婪匹配任意不是>的字符,确保不会跨标签匹配(比如避免把后面其他标签的内容也包含进来)
  • code\s*=\s*:匹配code属性,\s*表示允许=前后有任意数量的空格(包括0个)
  • ["']:匹配属性值的起始引号(单引号或双引号都支持)
  • ([^"']+):捕获组,匹配并提取所有不是引号的字符——这就是我们要的code属性值
  • ["']:匹配属性值的结束引号

Java代码实现示例

下面是完整的Java代码,能从你的字符串内容里批量提取所有符合要求的code值:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SMessageCodeExtractor {
    public static void main(String[] args) {
        // 模拟你从文件读取的字符串内容
        String fileContent = "<input type=\"button\" value=\"<s:message code=\"key.test.text\" />\">\n" +
                            "<input type=\"button2\" value='<s:message code=\"key.test.text1\" />\">\n" +
                            "<input type=\"button\" value = \"<s:message code = 'key.test.text2' />\">";

        // 编译正则表达式
        Pattern pattern = Pattern.compile("<s:message[^>]*?code\\s*=\\s*[\"']([^\"']+)[\"']");
        Matcher matcher = pattern.matcher(fileContent);

        // 遍历所有匹配结果并输出
        System.out.println("提取到的code属性值:");
        while (matcher.find()) {
            String codeValue = matcher.group(1);
            System.out.println("- " + codeValue);
        }
    }
}

运行这段代码,会输出:

提取到的code属性值:
- key.test.text
- key.test.text1
- key.test.text2

为什么不推荐字符串处理?

手动做字符串处理的话,你需要:

  1. 先找到所有<s:message的位置
  2. 再在每个标签范围内找code的位置
  3. 跳过=前后可能的空格
  4. 定位到属性值的引号起始和结束位置
    这个过程要处理各种边界情况(比如标签内有其他属性、引号嵌套、空格数量不固定等),代码会非常繁琐,而且容易出错。正则表达式已经帮我们封装了这些逻辑,显然是更优的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:38:59