Java相当于Python repr()?

Ian*_*ton 23 python java repr

有没有像Python的repr一样工作的Java方法?例如,假设该函数名为repr,

"foo\n\tbar".repr()
Run Code Online (Sandbox Code Playgroud)

会回来的

"foo\n\tbar"

foo
        bar

至于toString.

Dir*_*irk 8

在某些项目中,我使用以下帮助函数来完成类似于Python的字符串repr的操作:

private static final char CONTROL_LIMIT = ' ';
private static final char PRINTABLE_LIMIT = '\u007e';
private static final char[] HEX_DIGITS = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

public static String toPrintableRepresentation(String source) {

    if( source == null ) return null;
    else {

        final StringBuilder sb = new StringBuilder();
        final int limit = source.length();
        char[] hexbuf = null;

        int pointer = 0;

        sb.append('"');

        while( pointer < limit ) {

            int ch = source.charAt(pointer++);

            switch( ch ) {

            case '\0': sb.append("\\0"); break;
            case '\t': sb.append("\\t"); break;
            case '\n': sb.append("\\n"); break;
            case '\r': sb.append("\\r"); break;
            case '\"': sb.append("\\\""); break;
            case '\\': sb.append("\\\\"); break;

            default:
                if( CONTROL_LIMIT <= ch && ch <= PRINTABLE_LIMIT ) sb.append((char)ch);
                else {

                    sb.append("\\u");

                    if( hexbuf == null ) 
                        hexbuf = new char[4];

                    for( int offs = 4; offs > 0; ) {

                        hexbuf[--offs] = HEX_DIGITS[ch & 0xf];
                        ch >>>= 4; 
                    }

                    sb.append(hexbuf, 0, 4);
                }
            }
        }

        return sb.append('"').toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

它在这里给出的许多其他解决方案的主要优点是,它不仅仅过滤一组有限的不可打印字符(比如那些替换基于解决方案的字符),而只是过滤所有不可打印的ASCII字符.其中一些本来可以写得更好,但实际上它的功能......

请注意,就像Python函数一样,这个函数会用引号括起字符串.如果你不想这样,你必须在while循环之前和之后消除append('"')调用.


amo*_*moe 6

使用静态方法escapeJavaStringEscapeUtilsApache的百科全书文本

String repr = "\"" + StringEscapeUtils.escapeJava(myString) + "\"";
Run Code Online (Sandbox Code Playgroud)


llo*_*giq 5

Java没有repr-Function,但是repr已经覆盖了你(完全披露:我是repr的作者).


Dav*_*d Z 0

如果您只想在字符串上使用它,那么在紧要关头,您可以编写一个方法来遍历字符串并用转义码替换特殊字符(无论您想要什么“特殊”定义)。这就是我会做的。(我进行了快速搜索,但 Google 上没有任何结果,因此仅编写该方法可能比寻找现有的实现更快)