[英]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
被視為特殊的(分別是換行符和制表符)。 所以我們需要轉義反斜杠以使n
和t
字面意思處理。
StringEscapeUtils適用於字符串相關操作
給定String s
,
s = s.replace("\\", "\\\\");
將所有\\
替換為\\\\
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.