Java 基础:StringEscapeUtils的使用-转义字符的处理

文章目录

        • 要解决什么问题?—— 转义字符的处理
        • 要点
        • 代码
        • 区别看待 Java 正则表达式

要解决什么问题?—— 转义字符的处理

部分场景下,字符串不符合规范,需要进行替换,即Java 转义问题,否则涉及到 Json 转化时部分字符会导致系统报异常。

要点

  • replaceAll 使用时,可以使用校验规则,规则是转义后的字符串
  • 可以一个一个替换,如 test1
  • 可以一次替换,如 test2,替换规则使用 | 间隔
  • 使用 Json 存储,解析之后是非转义的,结合时需要手动转化一下
  • Json 编辑工具网站 Json 在线编辑
  • 为了防止网页转义,下面字符之间增加了空格处理
    " 对应 "
    \ 对应 \
  • 将转义后的字符串复制到 Java “这里” 里时,即使用双引号扩起来时,会再次转义,这个是自动的。

代码

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import org.apache.commons.lang.StringEscapeUtils;
import org.junit.Test;

import java.util.Iterator;
import java.util.Map;

/**
 * @Title: 转义测试
 * @Description:
 * @Author: wujie
 */
public class Del {

    @Test
    public void test1() {
    // 表示 "
        String rule1 = "\"";
        //表示 \
        String rule2 = "\\\\";

        //替换 "  和 \
        String testStr = "\"你好\"1\\2";
        System.out.println("before:"+testStr);
        testStr = testStr.replaceAll(rule1,"''");
        testStr = testStr.replaceAll(rule2,"/");
        System.out.println("before:"+testStr);
    }

    @Test
    public void test2() {
    //表示 " 或者 \
        String rule3 = "\"|\\\\";

        //替换 "  和 \
        String testStr = "\"你好\"1\\2";
        System.out.println("before:"+testStr);
        testStr = testStr.replaceAll(rule3,"*");
        System.out.println("before:"+testStr);
    }

    @Test
    public void test3(){
    	//Json 中 \\\" 表示 \",\\\\表示 \
        String strRule = "[{\"\\\"\":\"''\"},{\"\\\\\":\"/\"}]";
        JSONArray jsonArray = JSONArray.parseArray(strRule);
        Iterator iterator = jsonArray.iterator();

        Map<String, String> ruleMaps = Maps.newHashMap();
        while (iterator.hasNext()) {
            JSONObject jsonObject = (JSONObject) iterator.next();
            Map subMap = JSON.toJavaObject(jsonObject, Map.class);
            ruleMaps.putAll(subMap);
        }

        String testStr = "\"你好\"1\\2";
        System.out.println("before:" + testStr);
        for (Map.Entry<String, String> temMap : ruleMaps.entrySet()) {
            //这一步骤很关键,json 解析完 字符是非转义状态,需要手动转义一下
            testStr = testStr.replaceAll(StringEscapeUtils.escapeJava(temMap.getKey()), temMap.getValue());
        }
        System.out.println("after:" + testStr);
    }

}

区别看待 Java 正则表达式

转义字符的替换和正则表示式在格式上有很大的区别,可以说,转义字符更简单。
java中使用正则表达式校验的一个例子

你可能感兴趣的:(java基础)