当前位置:  开发笔记 > 编程语言 > 正文

Guava是否提供了一种解除字符串的方法?

如何解决《Guava是否提供了一种解除字符串的方法?》经验,为你挑选了1个好方法。

我需要逃避一个特殊字符String.

Guava提供了这个Escaper类,它正是这样做的:

Escaper escaper = Escapers.builder()
        .addEscape('[', "\\[")
        .addEscape(']', "\\]")
        .build();

String escapedStr = escaper.escape("This is a [test]");

System.out.println(escapedStr);
// -> prints "This is a \[test\]"

现在我有一个逃脱String,我需要解除它,我在番石榴找不到任何东西来做这件事.

我期待Escaper有一种unescape()方法,但事实并非如此.

编辑:我知道在一些非意义的情况下,取消内容可能很棘手,甚至是不可能的.

例如,这种Escaper用法可能导致含糊不清:

Escaper escaper = Escapers.builder()
        .addEscape('@', " at ")
        .addEscape('.', " dot ")
        .build();

除非转义的数据仅包含电子邮件地址,否则您无法通过取消它来安全地获取数据.

EscaperHTML实体安全使用的一个很好的例子:

Escaper escaper = Escapers.builder()
        .addEscape('&', "&")
        .addEscape('<', "<")
        .addEscape('>', ">")
        .build();

在这里,您可以安全地转义任何文本,将其合并到HTML页面中并随时取消它以显示它,因为您涵盖了所有可能的含糊之处.

总之,我不明白为什么unescaping是如此有争议.我认为开发者有责任正确使用这个类,了解他的数据并避免含糊不清.根据定义,转义意味着您最终需要进行转换.否则,它是混淆或其他一些概念.



1> Tunaki..:

不,不是的.显然,这是故意的.引用Chris Povirk回答的讨论:

unescaping的用例对我来说不太清楚.如果没有理解语言的解析器,通常无法识别转义的源文本.例如,如果我有以下输入:

String s = "foo\n\"bar\"\n\\";

然后,我的解析器已经理解\n,\"以及\\为了确定...

foo\n\"bar\"\n\\

......是"未转义"的文字.换句话说,它必须已经做了unescaping.情况类似于HTML和其他格式:我们不需要一个unescaper,因为我们需要一个解析器.

所以看起来你必须自己做.


@ChrisPovirk恕我直言,"Escaper"应该是对称的.如果*unescape*对应的实现,我认为它应该是`Escaper`类的一个方法,它包含了所有有用的信息.当然,如果没有人需要,它可能不值得.正如你所提到的,大多数情况下,unescaping是由*其他*完成的,例如浏览器.如果您决定在番石榴中介绍此内容,请告诉我,我很乐意为您提供帮助.
@ChrisPovirk你可能想对这个问题发表评论,以便OP得到通知.
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有