簡體   English   中英

如何在 Groovy 中轉義特殊字符,不包括 unicode

[英]How to escape special characters in Groovy, excluding unicode

我想轉義字符串中除 unicode 字符 (\\u) 之外的所有特殊字符,因為我仍然希望正確顯示非英文字符。 我目前正在使用 StringEscapeUtils.escapeJava() 方法,但還沒有找到排除特定字符的方法(在這種情況下,\\u 表示 unicode)。 我能想到的唯一替代方法是為除 \\u 之外的每個特殊字符調用 replace 或 replaceAll,這似乎並不理想。 有一個更好的方法嗎?

前任:

"Los 
niños"

應該轉換為"Los\\nniños"而不是"Los\\nni\ños"

好的,所以如果我們查看StringEscapeUtils的代碼,我們可以在這里看到escapeJava方法

public static final String escapeJava(final String input) {
    return ESCAPE_JAVA.translate(input);
}

其中使用ESCAPE_JAVA 定義here

public static final CharSequenceTranslator ESCAPE_JAVA = 
      new LookupTranslator(
        new String[][] { 
          {"\"", "\\\""},
          {"\\", "\\\\"},
      }).with(
        new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE())
      ).with(
        JavaUnicodeEscaper.outsideOf(32, 0x7f) 
    );

所以,我認為這是最后一點給你不想要的逃避......

所以我們可以推出自己的...給定您的輸入字符串:

def input = '''Los 
niños'''

我們可以導入類,並創建我們自己的LookupTranslator (從 commons-lang 中提取第一部分):

import org.apache.commons.lang3.text.translate.EntityArrays
import org.apache.commons.lang3.text.translate.LookupTranslator

def translator = new LookupTranslator([["\"", "\\\""], ["\\", "\\\\"]] as String[][]).with(
    new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE())
)

然后,我們可以轉義您的輸入字符串,並檢查結果是否符合預期:

assert translator.translate(input) == 'Los \\nniños'

如果您需要轉義 32 以下的 unicode 字符(但顯然,不是更高的代碼字符),您可以將翻譯器更改為:

import org.apache.commons.lang3.text.translate.EntityArrays
import org.apache.commons.lang3.text.translate.JavaUnicodeEscaper
import org.apache.commons.lang3.text.translate.LookupTranslator

def translator = new LookupTranslator([["\"", "\\\""], ["\\", "\\\\"]] as String[][]).with(
    new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE())
).with(JavaUnicodeEscaper.below(32))

所有這些都來自 commons-lang3,我認為這是您正在使用的版本...

暫無
暫無

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

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