下使用Java 8以上,檢查是否一個Unicode代碼點(符號)是一個字母或數字,純ASCII(< 128),否則輸出Unicode代碼點作爲數值的字符串。
static String convert(String str) {
int[] cps = str.codePoints()
.flatMap((cp) ->
Character.isLetterOrDigit(cp) && cp < 128
? IntStream.of(cp)
: String.valueOf(cp).codePoints())
.toArray();
return new String(cps, 0, cps.length);
}
String.codePoints()
產生一個IntStream,flatMap
增加IntStreams在單個扁平流,並且收集toArray
它在陣列中。所以我們可以從這些代碼點構造一個新的String。完全Unicode安全。
如果沒有分隔符,轉換是不可撤銷的。
論的Unicode:
的Unicode數字符號,稱爲代碼點,從0向上,進3字節範圍。
要編碼(格式化)以字節爲單位存在UTF-8(多字節),UTF-16LE和UTF-16BE(2字節序列)和UTF-32(碼分或多或少)。 .class文件中的Java字符串常量使用UTF-8。字符串由UTF-16BE char
組成。和String可以給出如上的代碼點。所以Java設計使用Unicode來表示文本。
爲什麼「#$」變成「353695」? – niceman
以下是轉換髮生的方式: #的十六進制utf-8爲23,十進制爲35 $爲十六進制的utf-8爲24,十進制爲36 _爲十六進制的utf-8爲5f和十進制是65 Sry編輯它的問題是Abcds23#$ _ss而不是Abcds23#$ ss – user2713255
不要將更多信息放入註釋中,而是更新您的問題。 – GhostCat