0
点赞
收藏
分享

微信扫一扫

123-java 转义工具类StringEscapeUtils

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>1.9</version>
        </dependency>
StringEscapeUtils.unescapeJava(result)

源码:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.apache.commons.text;

import java.io.IOException;
import java.io.Writer;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.text.translate.AggregateTranslator;
import org.apache.commons.text.translate.CharSequenceTranslator;
import org.apache.commons.text.translate.EntityArrays;
import org.apache.commons.text.translate.JavaUnicodeEscaper;
import org.apache.commons.text.translate.LookupTranslator;
import org.apache.commons.text.translate.NumericEntityEscaper;
import org.apache.commons.text.translate.NumericEntityUnescaper;
import org.apache.commons.text.translate.OctalUnescaper;
import org.apache.commons.text.translate.UnicodeUnescaper;
import org.apache.commons.text.translate.UnicodeUnpairedSurrogateRemover;
import org.apache.commons.text.translate.CsvTranslators.CsvEscaper;
import org.apache.commons.text.translate.CsvTranslators.CsvUnescaper;
import org.apache.commons.text.translate.NumericEntityUnescaper.OPTION;

public class StringEscapeUtils {
    public static final CharSequenceTranslator ESCAPE_JAVA;
    public static final CharSequenceTranslator ESCAPE_ECMASCRIPT;
    public static final CharSequenceTranslator ESCAPE_JSON;
    public static final CharSequenceTranslator ESCAPE_XML10;
    public static final CharSequenceTranslator ESCAPE_XML11;
    public static final CharSequenceTranslator ESCAPE_HTML3;
    public static final CharSequenceTranslator ESCAPE_HTML4;
    public static final CharSequenceTranslator ESCAPE_CSV;
    public static final CharSequenceTranslator ESCAPE_XSI;
    public static final CharSequenceTranslator UNESCAPE_JAVA;
    public static final CharSequenceTranslator UNESCAPE_ECMASCRIPT;
    public static final CharSequenceTranslator UNESCAPE_JSON;
    public static final CharSequenceTranslator UNESCAPE_HTML3;
    public static final CharSequenceTranslator UNESCAPE_HTML4;
    public static final CharSequenceTranslator UNESCAPE_XML;
    public static final CharSequenceTranslator UNESCAPE_CSV;
    public static final CharSequenceTranslator UNESCAPE_XSI;

    public StringEscapeUtils() {
    }

    public static StringEscapeUtils.Builder builder(CharSequenceTranslator translator) {
        return new StringEscapeUtils.Builder(translator);
    }

    public static final String escapeJava(String input) {
        return ESCAPE_JAVA.translate(input);
    }

    public static final String escapeEcmaScript(String input) {
        return ESCAPE_ECMASCRIPT.translate(input);
    }

    public static final String escapeJson(String input) {
        return ESCAPE_JSON.translate(input);
    }

    public static final String unescapeJava(String input) {
        return UNESCAPE_JAVA.translate(input);
    }

    public static final String unescapeEcmaScript(String input) {
        return UNESCAPE_ECMASCRIPT.translate(input);
    }

    public static final String unescapeJson(String input) {
        return UNESCAPE_JSON.translate(input);
    }

    public static final String escapeHtml4(String input) {
        return ESCAPE_HTML4.translate(input);
    }

    public static final String escapeHtml3(String input) {
        return ESCAPE_HTML3.translate(input);
    }

    public static final String unescapeHtml4(String input) {
        return UNESCAPE_HTML4.translate(input);
    }

    public static final String unescapeHtml3(String input) {
        return UNESCAPE_HTML3.translate(input);
    }

    public static String escapeXml10(String input) {
        return ESCAPE_XML10.translate(input);
    }

    public static String escapeXml11(String input) {
        return ESCAPE_XML11.translate(input);
    }

    public static final String unescapeXml(String input) {
        return UNESCAPE_XML.translate(input);
    }

    public static final String escapeCsv(String input) {
        return ESCAPE_CSV.translate(input);
    }

    public static final String unescapeCsv(String input) {
        return UNESCAPE_CSV.translate(input);
    }

    public static final String escapeXSI(String input) {
        return ESCAPE_XSI.translate(input);
    }

    public static final String unescapeXSI(String input) {
        return UNESCAPE_XSI.translate(input);
    }

    static {
        Map<CharSequence, CharSequence> unescapeJavaMap = new HashMap();
        unescapeJavaMap.put("\"", "\\\"");
        unescapeJavaMap.put("\\", "\\\\");
        ESCAPE_JAVA = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap)), new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE), JavaUnicodeEscaper.outsideOf(32, 127)});
        unescapeJavaMap = new HashMap();
        unescapeJavaMap.put("'", "\\'");
        unescapeJavaMap.put("\"", "\\\"");
        unescapeJavaMap.put("\\", "\\\\");
        unescapeJavaMap.put("/", "\\/");
        ESCAPE_ECMASCRIPT = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap)), new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE), JavaUnicodeEscaper.outsideOf(32, 127)});
        unescapeJavaMap = new HashMap();
        unescapeJavaMap.put("\"", "\\\"");
        unescapeJavaMap.put("\\", "\\\\");
        unescapeJavaMap.put("/", "\\/");
        ESCAPE_JSON = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap)), new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE), JavaUnicodeEscaper.outsideOf(32, 126)});
        unescapeJavaMap = new HashMap();
        unescapeJavaMap.put("\u0000", "");
        unescapeJavaMap.put("\u0001", "");
        unescapeJavaMap.put("\u0002", "");
        unescapeJavaMap.put("\u0003", "");
        unescapeJavaMap.put("\u0004", "");
        unescapeJavaMap.put("\u0005", "");
        unescapeJavaMap.put("\u0006", "");
        unescapeJavaMap.put("\u0007", "");
        unescapeJavaMap.put("\b", "");
        unescapeJavaMap.put("\u000b", "");
        unescapeJavaMap.put("\f", "");
        unescapeJavaMap.put("\u000e", "");
        unescapeJavaMap.put("\u000f", "");
        unescapeJavaMap.put("\u0010", "");
        unescapeJavaMap.put("\u0011", "");
        unescapeJavaMap.put("\u0012", "");
        unescapeJavaMap.put("\u0013", "");
        unescapeJavaMap.put("\u0014", "");
        unescapeJavaMap.put("\u0015", "");
        unescapeJavaMap.put("\u0016", "");
        unescapeJavaMap.put("\u0017", "");
        unescapeJavaMap.put("\u0018", "");
        unescapeJavaMap.put("\u0019", "");
        unescapeJavaMap.put("\u001a", "");
        unescapeJavaMap.put("\u001b", "");
        unescapeJavaMap.put("\u001c", "");
        unescapeJavaMap.put("\u001d", "");
        unescapeJavaMap.put("\u001e", "");
        unescapeJavaMap.put("\u001f", "");
        unescapeJavaMap.put("\ufffe", "");
        unescapeJavaMap.put("\uffff", "");
        ESCAPE_XML10 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_ESCAPE), new LookupTranslator(EntityArrays.APOS_ESCAPE), new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap)), NumericEntityEscaper.between(127, 132), NumericEntityEscaper.between(134, 159), new UnicodeUnpairedSurrogateRemover()});
        unescapeJavaMap = new HashMap();
        unescapeJavaMap.put("\u0000", "");
        unescapeJavaMap.put("\u000b", "&#11;");
        unescapeJavaMap.put("\f", "&#12;");
        unescapeJavaMap.put("\ufffe", "");
        unescapeJavaMap.put("\uffff", "");
        ESCAPE_XML11 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_ESCAPE), new LookupTranslator(EntityArrays.APOS_ESCAPE), new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap)), NumericEntityEscaper.between(1, 8), NumericEntityEscaper.between(14, 31), NumericEntityEscaper.between(127, 132), NumericEntityEscaper.between(134, 159), new UnicodeUnpairedSurrogateRemover()});
        ESCAPE_HTML3 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_ESCAPE), new LookupTranslator(EntityArrays.ISO8859_1_ESCAPE)});
        ESCAPE_HTML4 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_ESCAPE), new LookupTranslator(EntityArrays.ISO8859_1_ESCAPE), new LookupTranslator(EntityArrays.HTML40_EXTENDED_ESCAPE)});
        ESCAPE_CSV = new CsvEscaper();
        unescapeJavaMap = new HashMap();
        unescapeJavaMap.put("|", "\\|");
        unescapeJavaMap.put("&", "\\&");
        unescapeJavaMap.put(";", "\\;");
        unescapeJavaMap.put("<", "\\<");
        unescapeJavaMap.put(">", "\\>");
        unescapeJavaMap.put("(", "\\(");
        unescapeJavaMap.put(")", "\\)");
        unescapeJavaMap.put("$", "\\$");
        unescapeJavaMap.put("`", "\\`");
        unescapeJavaMap.put("\\", "\\\\");
        unescapeJavaMap.put("\"", "\\\"");
        unescapeJavaMap.put("'", "\\'");
        unescapeJavaMap.put(" ", "\\ ");
        unescapeJavaMap.put("\t", "\\\t");
        unescapeJavaMap.put("\r\n", "");
        unescapeJavaMap.put("\n", "");
        unescapeJavaMap.put("*", "\\*");
        unescapeJavaMap.put("?", "\\?");
        unescapeJavaMap.put("[", "\\[");
        unescapeJavaMap.put("#", "\\#");
        unescapeJavaMap.put("~", "\\~");
        unescapeJavaMap.put("=", "\\=");
        unescapeJavaMap.put("%", "\\%");
        ESCAPE_XSI = new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap));
        unescapeJavaMap = new HashMap();
        unescapeJavaMap.put("\\\\", "\\");
        unescapeJavaMap.put("\\\"", "\"");
        unescapeJavaMap.put("\\'", "'");
        unescapeJavaMap.put("\\", "");
        UNESCAPE_JAVA = new AggregateTranslator(new CharSequenceTranslator[]{new OctalUnescaper(), new UnicodeUnescaper(), new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_UNESCAPE), new LookupTranslator(Collections.unmodifiableMap(unescapeJavaMap))});
        UNESCAPE_ECMASCRIPT = UNESCAPE_JAVA;
        UNESCAPE_JSON = UNESCAPE_JAVA;
        UNESCAPE_HTML3 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_UNESCAPE), new LookupTranslator(EntityArrays.ISO8859_1_UNESCAPE), new NumericEntityUnescaper(new OPTION[0])});
        UNESCAPE_HTML4 = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_UNESCAPE), new LookupTranslator(EntityArrays.ISO8859_1_UNESCAPE), new LookupTranslator(EntityArrays.HTML40_EXTENDED_UNESCAPE), new NumericEntityUnescaper(new OPTION[0])});
        UNESCAPE_XML = new AggregateTranslator(new CharSequenceTranslator[]{new LookupTranslator(EntityArrays.BASIC_UNESCAPE), new LookupTranslator(EntityArrays.APOS_UNESCAPE), new NumericEntityUnescaper(new OPTION[0])});
        UNESCAPE_CSV = new CsvUnescaper();
        UNESCAPE_XSI = new StringEscapeUtils.XsiUnescaper();
    }

    public static final class Builder {
        private final StringBuilder sb;
        private final CharSequenceTranslator translator;

        private Builder(CharSequenceTranslator translator) {
            this.sb = new StringBuilder();
            this.translator = translator;
        }

        public StringEscapeUtils.Builder escape(String input) {
            this.sb.append(this.translator.translate(input));
            return this;
        }

        public StringEscapeUtils.Builder append(String input) {
            this.sb.append(input);
            return this;
        }

        public String toString() {
            return this.sb.toString();
        }
    }

    static class XsiUnescaper extends CharSequenceTranslator {
        private static final char BACKSLASH = '\\';

        XsiUnescaper() {
        }

        public int translate(CharSequence input, int index, Writer out) throws IOException {
            if (index != 0) {
                throw new IllegalStateException("XsiUnescaper should never reach the [1] index");
            } else {
                String s = input.toString();
                int segmentStart = 0;
                int searchOffset = 0;

                while(true) {
                    int pos = s.indexOf(92, searchOffset);
                    if (pos == -1) {
                        if (segmentStart < s.length()) {
                            out.write(s.substring(segmentStart));
                        }

                        return Character.codePointCount(input, 0, input.length());
                    }

                    if (pos > segmentStart) {
                        out.write(s.substring(segmentStart, pos));
                    }

                    segmentStart = pos + 1;
                    searchOffset = pos + 2;
                }
            }
        }
    }
}

举报

相关推荐

0 条评论