代码之家  ›  专栏  ›  技术社区  ›  user1768830

用内联正则表达式交换Groovy中的字符串字段值?

  •  0
  • user1768830  · 技术社区  · 13 年前

    我有一个POJO:

    public class Dog {
        String uuid;
    
        // ...etc.
    }
    

    我想写一个简单的Groovy表达式来替换 uuid 具有其他字符/字符串的字符串字段,特别是:

    • 替换“”的实例 @ “带有” elbow "
    • 替换双引号的实例“ " “单引号(” ' ")
    • 替换“”的实例 % “带有” shoulder "

    我知道Groovy会是这样的:

    myDog.getUUID().replaceAll("[@|\"|%]+", ???);
    

    但我不知道如何完成所有3个内联,也不知道它们的实际正则表达式应该是什么。

    如果可能的话,我希望是一首单曲 replace 命令,而不是3个单独的命令,但如果一个命令不可能,我将使用3个单独替换。提前谢谢!

    3 回复  |  直到 13 年前
        1
  •  2
  •   Reimeus    13 年前

    你可以用链条 replace 方法在一起

    uuid = uuid.replace("@", "elbow").replace("\"", "'").replace("%", "shoulder");
    
        2
  •  2
  •   falsetru    13 年前

    使用符号映射+正则表达式:

    subs = [
        '@': 'elbow',
        '"': "'",
        '%': 'shoulder'
    ]
    uuid = 'a @ b % c " d';
    uuid.replaceAll(/[@"%]/, { subs[it[0]] })
    // ===> a elbow b shoulder c ' d
    

    注释

    • 你不需要 | 在…内 [] 如果存在, | 也匹配。
        3
  •  1
  •   No Idea For Name    13 年前

    您不必为此使用regex:do:

    string str = dog.uuid.replace("@", "elbow");
    str = str.replace("%", "shoulder");
    str = str.replace("%", "shoulder");
    str = str.replace("\"", "\'");
    dog.uuid = str;
    

    我们正在使用格式 "\"" 这样编译器就不会混淆字符串中的quates和字符串的边界