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

ENUM_NLS翻译逻辑优化问询:带编号字符串拆分重组实现

解决带编号枚举描述的翻译重组问题

你需要同时处理两种格式的枚举描述:普通字符串(比如house hello)和带编号的字符串(比如1 - Selected house),核心需求是拆分编号前缀、翻译核心文本后再重组。下面是具体的解决方案和修改后的代码:

核心思路

  • 用正则表达式识别带编号的格式:匹配以数字 + 空格 + - + 空格开头的字符串,捕获编号前缀和后面的待翻译文本
  • 对普通文本直接匹配翻译;对带编号的文本,用拆分出的核心文本去匹配翻译,再和前缀拼接
  • 封装工具方法处理字符串拆分,让代码逻辑更清晰、易维护

修改后的完整代码

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EnumTranslationHandler {

    // 工具方法:拆分枚举描述,返回长度为2的数组
    // 索引0:编号前缀(带编号格式返回"1 - "这类,普通格式返回空字符串)
    // 索引1:待翻译的核心文本
    private static String[] splitEnumDescription(String enumDesc) {
        // 正则匹配:严格匹配开头的数字+空格+-+空格格式
        Pattern pattern = Pattern.compile("^(\\d+ - )(.*)$");
        Matcher matcher = pattern.matcher(enumDesc.trim());
        
        if (matcher.matches()) {
            return new String[]{matcher.group(1), matcher.group(2).trim()};
        } else {
            // 普通格式,前缀为空,核心文本为原字符串去除首尾空格
            return new String[]{"", enumDesc.trim()};
        }
    }

    public void getTraduttoreIt_ENUM_NLS() throws Exception { 
        List<EnumNls> db2 = getListEnumNls(); 
        List<DizioPt> sqlServer = getListDizioPt(); 
        BufferedWriter scrivi = new BufferedWriter( 
            new FileWriter("C:/Users/francesco/Desktop/Table_THERA.ENUM_NLS_Sez4.txt")); 
        
        System.out.println("-------------------WRITE FILE N°4--------TRANSLATION------------------------"); 
        
        for (int i = 0; i < db2.size(); i++) { 
            EnumNls enumNls = db2.get(i);
            String enumDesc = enumNls.getEnumDesc();
            // 拆分枚举描述为前缀和待匹配关键词
            String[] splitResult = splitEnumDescription(enumDesc);
            String prefix = splitResult[0];
            String keywordToMatch = splitResult[1];

            for (int j = 0; j < sqlServer.size(); j++) { 
                DizioPt dizioPt = sqlServer.get(j);
                // 用拆分后的核心文本匹配翻译库中的关键词
                if (keywordToMatch.equals(dizioPt.getKeyword().trim())) { 
                    String translatedText = dizioPt.getTraduzione().trim();
                    // 重组最终文本:编号前缀 + 翻译后的内容
                    String finalDesc = prefix + translatedText;

                    // 用String.format简化SQL拼接,提升可读性
                    String insertSql = String.format(
                        "INSERT INTO THERA.ENUM_NLS VALUES('%s','%s','en','%s');",
                        enumNls.getAttributeRef().trim(),
                        enumNls.getEnumValue().trim(),
                        finalDesc
                    );

                    System.out.println(insertSql);
                    scrivi.write(insertSql);
                    scrivi.newLine();
                    scrivi.flush(); 
                } 
            } 
        } 
        scrivi.close(); 
    }

    // 以下为假设的已有方法/实体类,你可根据实际情况替换
    private List<EnumNls> getListEnumNls() {
        // 原数据获取逻辑
        return null;
    }

    private List<DizioPt> getListDizioPt() {
        // 原翻译库获取逻辑
        return null;
    }
}

class EnumNls {
    private String attributeRef;
    private String enumValue;
    private String enumDesc;

    public String getAttributeRef() { return attributeRef; }
    public String getEnumValue() { return enumValue; }
    public String getEnumDesc() { return enumDesc; }
}

class DizioPt {
    private String keyword;
    private String traduzione;

    public String getKeyword() { return keyword; }
    public String getTraduzione() { return traduzione; }
}

关键细节说明

  1. 正则准确性:^(\\d+ - )(.*)$确保只匹配以数字开头、后跟标准-前缀的格式,避免误匹配包含-但不是编号的文本
  2. 边界处理:所有字符串都做了trim()处理,避免因首尾空格导致匹配失败或SQL语句出现无效空格
  3. 代码可读性:用String.format()替代原始字符串拼接,减少冗余代码,也方便后续修改SQL模板

修改后的代码可以完美兼容两种场景:

  • 普通字符串(如house hello):直接匹配翻译后输出
  • 带编号字符串(如1 - Selected house):拆分出1 - 前缀,用Selected house匹配翻译得到已选房屋,最终重组为1 - 已选房屋输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:56:01