Guava 相当于 Apache commons.lang3 StringEscapeUtils.escapeJava()

Guava equivalent for Apache commons.lang3 StringEscapeUtils.escapeJava()

目前我正在使用来自 Apache Commons 的 StringEscapeUtils.escapeJava(),但这在 3.6 后被标记为已弃用,建议移动到 commons-text 包。因为我目前不依赖于它,并且觉得不需要为这个包添加另一个依赖项,所以我正在研究我的其他包含库 (Guava) 提供的转义功能。

但是,我找不到与 escapeJava() 方法等效的方法。由于 Guava 的工作方式似乎有点不同,我想知道是否有人可以指出我如何使用 Guava 获得相同的结果? (或使用 commons-lang3 中未弃用的 类)

我看不出有什么可比性。看起来确实最好的选择是只添加对 commons-text.

的依赖

但是,如果您真的反对,您可以使用 Guava 的 Escapers 并尝试重新构建 StringEscapeUtils#ESCAPE_JAVA 中的 Java 规则。然而,这似乎是一种更糟糕的方法。

由于我在 guava 中找不到任何合适的替代品,我使用 lang3 中的 StringUtils class 再次尝试。我做了一个小的实用函数来转义换行符和制表符。欢迎提出建议,但目前仅此而已。

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" }
  );
}

我运行对其进行了以下测试:

@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"));
}