有没有办法使用原始字符串在Java中(不转义序列)?
(我写的正则表达式的代码相当数量和原始字符串会使我的代码非常更具可读性)
据我所知,语言不直接提供这一点,但有什么办法以任何方式来“模拟”呢?
有没有办法使用原始字符串在Java中(不转义序列)?
(我写的正则表达式的代码相当数量和原始字符串会使我的代码非常更具可读性)
据我所知,语言不直接提供这一点,但有什么办法以任何方式来“模拟”呢?
不,没有。
一般情况下,你会把原始字符串和正则表达式中的属性文件,但这些有一些转义序列的要求了。
这是一个变通,如果你使用eclipse。 你可以自动获得的文本正确multilined和特殊字符自动转义长块时,将文本粘贴到一个字符串
“ - 粘贴这里 - ”;
如果启用窗口→首选项→Java的→编辑→打字→这种选择“粘贴到一个字符串时逃生文本”
我用Pattern.quote 。 它解决问题的问题。 正是如此:
Pattern pattern = Pattern.compile(Pattern.quote("\r\n?|\n"));
该帖方法返回一个字符串,将匹配提供的字符串参数,它返回字符串是我们的情况下,适当引用的字符串。
否(相当可悲)。
具有原始文本文件中的类路径,并与阅读的getResourceAsStream它(....)
( 属性文件很常见,但凌乱的-我把最正则表达式的代码,并妥善保管,我可以引用它,你也应该这么做至于实际的问题。)
是的,有办法来解决穷人的可读性。 您可以试试:
String s = "crazy escaped garbage"; //readable version//
虽然这需要小心更新时。 Eclipse拥有,让您在引号之间粘贴文本的选项,以及转义序列适用于你。 这个策略是首先编辑阅读的版本,然后删除垃圾,并将其粘贴在空引号“”之间。
主意时间:
哈克你的编辑器将其转换; 释放作为一个插件。 我查了一下周围的插件,但没有发现(试行虽然搜索)。 有逃脱源字符串和文本框的文本(贴现\ n \ r \ n)的之间的一个一一对应。 也许突出了可用于在两端的两个引号的文本。
String s = "##########
#####";
其中#是任意字符,其被突出显示 - 断裂被视为一个新行。 键入或突出显示区域内粘贴的文本都逃过了“真正的”源,并且如果他们不显示。 (在相同的方式,Eclipse的逃逸粘贴的文本,这将逃脱键入的文本,也没有反斜杠显示它。)删除引号中的一个造成一个语法错误,如果你想正常编辑。 嗯。
注:截至今天,无法使用。 也许我会再次编辑这个答案每当功能发布。
有一个持续的提议引进原始字符串在Java中 。 他们实际上很多有用的正则表达式中的情况。
实施例1:这是编码为一个正则表达式的字符串
System.out.println("this".matches("\\w\\w\\w\\w"));
可以交替地编码为
System.out.println("this".matches(`\w\w\w\w`));
因为反斜杠不会被解释为具有特殊的意义。
例2:多行字符串文字与外语追加。
A multiple line string that was coded as
String html = "<html>\n" +
" <body>\n" +
" <p>Hello World.</p>\n" +
" </body>\n" +
"</html>\n";
可以交替地编码为
String html = `<html>
<body>
<p>Hello World.</p>
</body>
</html>
`;
这避免了中间报价,级联和明确的换行符的需要。
希望我们能很快会释放。
串#的getBytes()公开包含在实际上包含16位UTF-16编码的字符串的每一个字符串对象内部字节数组的副本-字节数组将包含相同的字符串转换为匹配平台的默认字符集。 我想说的是,我认为这是接近“原始”的字符串,你可以永远得到Java编写的。
你可以写你自己的,非转义财产的读者,把你的字符串资源文件。
我个人认为正则表达式的字符串数据,而不是代码,所以我并不在我的代码和他们一样 - 但我知道这是不切实际和不受欢迎的(是的,我知道,你不必在我大声喊叫)。
鉴于有做这种没有原生的方式,我可以想出两种可能性(当然,三而第三个是,嗯,不自然)。
所以,我个人的偏好是只解析文件转换为字符串。 你可以命名该文件中的每个条目,并将它们全部加载到一个哈希表从您的代码容易访问。
第二选择,创建将被预加工成Java接口的文件; 因为它,因此它可以逃脱正则表达式。 我个人讨厌代码生成,但如果Java文件是100%,从来没有人编辑,这不是太糟糕(实邪产生你预期编辑文件!)
第三届(棘手,可能是一个坏主意):您可能能够创建一个自定义的doclet将提取您的意见串到一个文本文件或在编译时头文件,然后使用上面的其他两种方法之一。 这样可以使你的琴弦在正在使用他们相同的文件。 这可能是真的很难做正确,和失败的惩罚是极端的,所以我不会考虑它,除非我有一个压倒性的需要和一些非常令人印象深刻的天赋。
因为评论是一个“预”标签内的自由形式和事物都从格式化和其他系统uglies非常安全的,我只建议这一点。 该doclet中可以打印的javadoc之前提取这一点,甚至可以添加一些生成的javadoc表明您正则表达式的字符串使用。
downvoting,告诉我这是一个愚蠢的想法之前 - 我知道,我只是想我会建议它,因为它很有趣,但我喜欢的,因为我上面所述是一个简单的文本文件...
不可以,但有一个的IntelliJ插件,使得这个更容易处理,称为字符串操作 。
的IntelliJ也将自动跳脱粘贴到一个字符串。 (由于@Dread 指出 ,Eclipse有一个插件来实现这一点。)