番石榴等效于Apache commons.lang3 StringEscapeUtils.escapeJava()

Mic*_*sma 5 java escaping apache-commons guava

当前,我使用的StringEscapeUtils.escapeJava()是Apache Commons,但是从3.6开始,此标记为不推荐使用,建议移至该commons-text软件包。由于我目前不依赖于此,并且不需要为这个软件包添加另一个依赖关系,因此我一直在研究其他随附库(Guava)提供的转义功能。

但是,我找不到等效的escapeJava()方法。由于番石榴的工作方式似乎有些不同,所以我想知道是否有人可以指出如何使用番石榴实现相同的结果?(或使用来自的不推荐使用的类commons-lang3

Mic*_*sma 1

由于我在番石榴中找不到任何合适的替代品,因此我再次尝试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)