Mic*_*sma 5 java escaping apache-commons guava
当前,我使用的StringEscapeUtils.escapeJava()是Apache Commons,但是从3.6开始,此标记为不推荐使用,建议移至该commons-text软件包。由于我目前不依赖于此,并且不需要为这个软件包添加另一个依赖关系,因此我一直在研究其他随附库(Guava)提供的转义功能。
但是,我找不到等效的escapeJava()方法。由于番石榴的工作方式似乎有些不同,所以我想知道是否有人可以指出如何使用番石榴实现相同的结果?(或使用来自的不推荐使用的类commons-lang3)
由于我在番石榴中找不到任何合适的替代品,因此我再次尝试StringUtils使用lang3. 我制作了一个小型实用函数来转义换行符和制表符。欢迎提出建议,但目前就这样了。
public static String escapeForLogs(String input) {
return org.apache.commons.lang3.StringUtils.replaceEach(
input,
new String[] { "\r\n", "\r", "\n", "\t" },
new String[] { "\\\\n", "\\\\n", "\\\\n", "\\\\t" }
);
}
Run Code Online (Sandbox Code Playgroud)
我对其进行了以下测试:
@Test
public void testEscapeForLogs() {
assertEquals("without linebreaks/tabs stays the same", "lala", e scapeForLogs("lala"));
assertEquals("empty string is fine", "", escapeForLogs(""));
assertEquals("newline gets escaped", "\\\\n", escapeForLogs("\n"));
assertEquals("two newlines", "\\\\n\\\\n", escapeForLogs("\n\n"));
assertEquals("tab", "\\\\t", escapeForLogs("\t"));
assertEquals("return carridge gets escaped", "\\\\n", escapeForLogs("\r"));
assertEquals("return carridge+newline gets converted", "\\\\n", escapeForLogs("\r\n"));
assertEquals("newline before cr+nl", "\\\\n\\\\n", escapeForLogs("\n\r\n"));
assertEquals("2 cr+nl", "\\\\n\\\\n", escapeForLogs("\r\n\r\n"));
assertEquals("some combination", "lala\\\\nlalala\\\\n\\\\nla\\\\tla", escapeForLogs("lala\nlalala\n\nla\tla"));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |