Java中的字符串轉義符 "\\"

下面的單元測試能夠通過,這可能不符合直覺。

@Test
public void passed() {
String a = "\\";
assertFalse(a.length() == 2);
assertTrue(a.length() == 1);

String b = "\\\\";
assertTrue(b.length() == 2);

}


原因在於"\"在這裏被JVM解釋爲轉義符,所以如果當你需要一個"\",在Java裏面同時需要爲JVM提供一個"\"用於轉義,這樣你就得到了一個字符"\\"。

進一步的可以做一個小實驗,在用戶UI中輸入字符"\abc",調試模式用該字符初始化的Java變量其實是"\\abc",當你把這個字符輸出到文件或者保存到數據庫中時,我們看到的是"\abc".

給定一個表達式:
foobar~='^.*a[b-f]g.*$',
我們不想讓其中正則表達式生效(本意是想讓諸如mvel這樣的語言解釋器,將[b-f]按照字面意義上去讀入),這樣的話,前面表達式如果存在數據庫中,似乎是這樣:
foobar ~='^.*a\\[b-f\\]g.*$'

進一步的,在Java代碼中將表達式賦值給一個變量,看起來應該是這個樣子

String expression = "foobar~='^.*a\\\\[b-f\\\\]g.*$'";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章