`
lan13217
  • 浏览: 482486 次
  • 性别: 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正则表达教程123456

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

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

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

    java正则表达式,十分有用的正则表达式

    众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费...正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

    Java正则表达式详解

    正则表达式是一种可以用于模式匹配和替换的强有力的工具,一个正则表达式就是由普通的字符(例 如字符 a 到 z)以及特殊字符(称为元字符)组成的...正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

    Java正则表达式入门

    大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字...正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

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

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

    java中常用的正则式

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

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

    主要给大家介绍了Java如何用正则表达式实现${name}形式的字符串模板,文章给出详细的实例代码,对大家的理解和学习会很有帮助,有需要的朋友们下面来一起看看吧。

    Java中的正则表达式 -- 示例详解

    自从jdk1.4推出java.util.regex包,就为我们提供了很好的JAVA正则表达式应用平台。 因为正则表达式是一个很庞杂的体系,所以我仅例举些入门的概念,更多的请参阅相关书籍及自行摸索。 \\ 反斜杠 \t 间隔 ('\u0009...

    Java的常用的正则表达式

    收录了常见的文本正则表达式的模板,便于开发

    Java正则表达式基础入门知识

    众所周知,在程序开发中,...正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 一:什么是正则表达式  1.定义:正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例

    3-自定义模板的解析(正则表达式)

    3-自定义模板的解析(正则表达式)

    Java正则表达式入门基础篇(新手必看)

    正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会...

    C# 最全的日期正则表达式,没有之一

    写复杂正则的一个常用方法,就是先把不相关的需求拆分开,分别写出对应的正则,然后组合,检查一下相互的关联关系以及影响,基本上就可以得出对应的正则。 按闰年的定义可知,日期可以有几种分类方法。 3.1.1 根据...

    javajava概要设计方案.doc

    < thinking in java >(JNI) < java核心技术第2卷> (JNI)正则表达式 2.总体设计 2.1需求规定 2.1.1系统功能 本系统功能定位为为用户提供网页搜索功能,通过简单的提交关键字,实现页面检索 2.1.2系统性能 索引...

    正则表达式

    它简单而且实用,是一个用于匹配字符串的模板,我们定义的任意的一个字符串都可以看成是一个正则表达式。 2、 String类也提供了几个和正则表达式有关的几个特殊方法 1) Boolean matches(String regex):判断该字符...

    文件写入,项目相对路径,java反射,模板数据写入

    格式化文件操作,将数据按照模板写入新文件,正则表达式替换模板指定内容,文件读写,stateprocess.java 项目运行文件

    poi 基于excel模板导出功能

    poi 基于excel模板导出 功能强大 代码清晰

    java文集

    Java正则表达式 批量上传--采集 (多个文件夹) The Agile Way hibernate mapping文件中的标记详解:关系标记 ANT 安装使用及build.xml文档模板 inverse和cascade在关联更新中的作用 hibernate ...

Global site tag (gtag.js) - Google Analytics