簡體   English   中英

如何在 Java 中轉義字符串?

[英]How do I escape a string in Java?

我正在用 Java 讀取源文件,但是當我打印它時(sysout),轉義字符不再轉義。 如何在 Java 中的字符串中轉義\\n\\t的字符?

您應該使用Apache Commons Text 中StringEscapeUtils類(您也可以在 Apache Commons Lang3 中找到該類,但該類已被棄用)。 您會發現 Apache Commons 中有許多其他產品可能對您在 Java 開發中遇到的其他問題有用,因此您不必重新發明輪子。

您想要的特定調用與“Java 轉義”有關; API 調用是StringEscapeUtils.escapeJava() 例如:

System.out.println(StringEscapeUtils.escapeJava("Hello\r\n\tW\"o\"rld\n"));

會打印出來:

Hello\r\n\tW\"o\"rld\n

該庫中還有許多其他轉義實用程序。 您可以在 Maven Central 中找到Apache Commons Text,然后將其添加到您的 Maven 項目中,如下所示:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.3</version>
</dependency>

如果您使用的是 Gradle:

compile "org.apache.commons:commons-text:1.3"

這里的許多解決方案都建議添加Apache Commons Text並使用StringEscapeUtils 這里的其他一些解決方案完全是錯誤的。

一個潛在的解決方案如下:

/**
 * escape()
 *
 * Escape a give String to make it safe to be printed or stored.
 *
 * @param s The input String.
 * @return The output String.
 **/
public static String escape(String s){
  return s.replace("\\", "\\\\")
          .replace("\t", "\\t")
          .replace("\b", "\\b")
          .replace("\n", "\\n")
          .replace("\r", "\\r")
          .replace("\f", "\\f")
          .replace("\'", "\\'")
          .replace("\"", "\\\"");
}

轉義列表來自 Oracle 的list 請注意\\\\首先被轉義,因為您不想稍后重新轉義它。)

這個解決方案沒有想象的那么快,但它應該可以工作。 理想情況下,您只需解析 String 一次,而無需繼續重建 String 數組。 對於小字符串,這應該沒問題。

如果您從存儲數據的角度考慮這一點,還可以考慮將其轉換為Base64表示形式——它是快速、單次解析並且不會使用太多額外空間。

使用:

\\\\n\\\\t

一些以反斜杠 ( \\ ) 開頭的字符形成轉義序列,對編譯器具有特殊意義。 所以在你的情況下\\n\\t被視為特殊的(分別是換行符和制表符)。 所以我們需要轉義反斜杠以使nt字面意思處理。

StringEscapeUtils適用於字符串相關操作

給定String s

s = s.replace("\\", "\\\\");

將所有\\替換為\\\\

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM