`
lan13217
  • 浏览: 497681 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java 正则模板

 
阅读更多
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExam {
    public static void main(String args[]) {
        HashMap data = new HashMap();
        String template = "尊敬的客户${customerName}你好!本次消费金额${amount},"
                + "您帐户${accountNumber}上的余额为${balance},欢迎下次光临!";
        data.put("customerName", "刘明");
        data.put("accountNumber", "888888888");
        data.put("balance", "$1000000.00");
        data.put("amount", "$1000.00");
        try {
            System.out.println(composeMessage(template, data));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String composeMessage(String template, Map data)
            throws Exception {
        String regex = "\\$\\{(.+?)\\}";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(template);
        /*
         * sb用来存储替换过的内容,它会把多次处理过的字符串按源字符串序
         * 存储起来。
         */
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            String name = matcher.group(1);//键名
            String value = (String) data.get(name);//键值
            if (value == null) {
                value = "";
            } else {
                /*
                 * 由于$出现在replacement中时,表示对捕获组的反向引用,所以要对上面替换内容
                 * 中的 $ 进行替换,让它们变成 "\$1000.00" 或 "\$1000000000.00" ,这样
                 * 在下面使用 matcher.appendReplacement(sb, value) 进行替换时就不会把
                 * $1 看成是对组的反向引用了,否则会使用子匹配项值amount 或 balance替换 $1
                 * ,最后会得到错误结果:
                 *
                 * 尊敬的客户刘明你好!本次消费金额amount000.00,您帐户888888888上的余额
                 * 为balance000000.00,欢迎下次光临!
                 *
                 * 要把 $ 替换成 \$ ,则要使用 \\\\\\& 来替换,因为一个 \ 要使用 \\\ 来进
                 * 行替换,而一个 $ 要使用 \\$ 来进行替换,因 \ 与  $ 在作为替换内容时都属于
                 * 特殊字符:$ 字符表示反向引用组,而 \ 字符又是用来转义 $ 字符的。
                 */
                value = value.replaceAll("\\$", "\\\\\\$");
                //System.out.println("value=" + value);
            }
            /*
             * 经过上面的替换操作,现在的 value 中含有 $ 特殊字符的内容被换成了"\$1000.00"
             * 或 "\$1000000000.00" 了,最后得到下正确的结果:
             *
             * 尊敬的客户刘明你好!本次消费金额$1000.00,您帐户888888888上的
             * 余额为$1000000.00,欢迎下次光临!
             *
             * 另外,我们在这里使用Matcher对象的appendReplacement()方法来进行替换操作,而
             * 不是使用String对象的replaceAll()或replaceFirst()方法来进行替换操作,因为
             * 它们都能只能进行一次性简单的替换操作,而且只能替换成一样的内容,而这里则是要求每
             * 一个匹配式的替换值都不同,所以就只能在循环里使用appendReplacement方式来进行逐
             * 个替换了。
             */
            matcher.appendReplacement(sb, value);
            System.out.println("sb = " + sb.toString());
        }
        //最后还得要把尾串接到已替换的内容后面去,这里尾串为“,欢迎下次光临!”
        matcher.appendTail(sb);
        return sb.toString();
    }
}

http://jiangzhengjun.iteye.com/blog/513929
分享到:
评论

相关推荐

    怎么利用Java正则表达式换模板

    Java正则表达式是处理文本的强大工具,尤其在替换模板方面有着广泛的应用。在Java中,我们可以使用`java.util.regex`包中的`Pattern`和`Matcher`类来实现字符串的匹配与替换。以下是一个详细解释如何利用Java正则...

    java正则表达式匹配工具

    Java正则表达式匹配工具是IT领域中一种强大的文本处理工具,它利用正则表达式(Regular Expression)的规则来查找、替换或者提取文本中的特定模式。正则表达式是一种特殊的字符序列,能够帮助程序员或者用户高效地...

    java 正则匹配所有 {},并取出所有符合的字符串。

    在Java编程语言中,正则表达式是一种强大的文本处理工具,可以用来匹配、查找、替换和解析字符串。这里我们关注的是如何使用正则表达式来匹配所有包含在花括号 `{}` 中的字符串,并将其提取出来。这在处理模板引擎、...

    java 正则表达式应用jar包 regex-smart.jar

    Java正则表达式是编程语言Java中的一个强大工具,它用于模式匹配、数据验证和文本检索替换。在Java中,正则表达式是通过java.util.regex包提供的接口和类来实现的。`regex-smart.jar`这个库显然是为了简化开发者在...

    JAVA正则性表达式匹配软件

    Java正则表达式匹配软件是基于Java编程语言开发的一款工具,专门用于处理字符串的模式匹配、查找、替换等任务。正则表达式(Regular Expression)是一种强大的文本处理工具,广泛应用于数据验证、文本搜索和替换等多...

    Java正则表达教程123456

    Java正则表达入门教程1~6大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的...

    Java正则表达式详解

    ### Java正则表达式详解 #### 一、正则表达式简介 正则表达式是一种强大的文本模式匹配工具,能够帮助开发者高效地处理各种文本数据。一个正则表达式是由普通字符(例如字母 a 到 z)和特殊字符(称为元字符)组成...

    java正则表达式20页详细java正则表达式讲义课件可做教学用

    ### Java正则表达式详细讲义知识点总结 #### 一、正则表达式概述 - **定义**: 正则表达式是一种强大的文本处理工具,它能够帮助开发者在文本中搜索、提取、替换或删除特定的字符模式。 - **应用场景**: 处理字符串...

    Java正则表达式详解.pdf

    ### Java正则表达式详解 #### 一、正则表达式简介 正则表达式(Regular Expression)是一种用于模式匹配和替换的强大工具。它由普通字符(如a-z)及特殊字符(称为元字符)组成,能够描述在查找文本主体时待匹配的...

    Java正则表达式入门

    ### Java正则表达式入门详解 #### 一、正则表达式基础概念 正则表达式是一种用于文本处理的强大工具,它可以实现模式匹配和替换功能。一个正则表达式是由普通字符(如字母a到z)和特殊字符(元字符)组成的文字...

    个人收集的JAVA正则表达式

    这个个人收集的JAVA正则表达式集合可能是各种常见场景下的正则表达式模板,对于Java开发者来说是一份宝贵的参考资料,能够帮助他们更高效地处理字符串相关任务。通过学习和实践这些正则表达式,可以提升在文本处理、...

    java正则表达式: regular expression(一)

    Java正则表达式是编程语言Java中的一个强大工具,它用于处理字符串的模式匹配和文本检索替换。在本文中,我们将深入探讨Java正则表达式的概念、语法以及如何在实际项目中应用它们。 正则表达式(Regular Expression...

    java代码-在线 java正则表达式测试工具,java正则测试,在线java正则匹配

    Java正则表达式是编程语言Java中的一个强大功能,它允许开发者通过模式匹配来处理字符串。这个在线Java正则表达式测试工具就是为开发者提供了一个方便的平台,可以在不编写完整程序的情况下,测试和调试正则表达式。...

    JAVA与正则表达式

    `Pattern` 类用于将正则表达式编译为一个模板,而 `Matcher` 类则用来根据这个模板匹配目标字符串。例如,`Pattern.compile("a|f")` 编译了一个模式,表示匹配字符 'a' 或 'f'。然后,`Matcher` 对象的 `find()` ...

    regex正则表达式插件

    3. **代码辅助**:为编辑器添加代码补全功能,提供常用的正则表达式模板,减少手动输入的错误。 4. **查找引用**:在项目中查找所有与正则表达式匹配的变量或函数名,便于理解代码逻辑。 5. **多模式匹配**:支持...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    * Summary of regular-expression constructs 正则表达式结构简介: * Construct Matches * Characters 字符: * x The character x x 字符 x * \\ The ...

    正则表达式测试软件

    此外,软件可能还提供了一些其他功能,如错误提示、性能分析、常见正则表达式模板等,以提升用户的使用体验和效率。 总之,正则表达式是IT领域中的重要工具,学习并熟练掌握正则表达式能极大地提升文本处理能力。这...

    java中常用的正则式

    正则表达式 正则表达式 - 教程 正则表达式 - 简介 正则表达式 - 语法 正则表达式 - 元字符 正则表达式 - 运算符优先级 正则表达式 - 匹配规则 ...正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

    Java用正则表达式实现${name}形式的字符串模板实例

    在给定的实例中,`renderString` 方法演示了如何使用正则表达式和Java的 `Pattern` 和 `Matcher` 类来完成字符串模板的替换。以下是对这个方法的详细解释: 1. 首先,`renderString` 方法接受两个参数:一个包含...

Global site tag (gtag.js) - Google Analytics