2016-07-06 79 views
0

我只想將特殊字符轉換爲UTF-8等效字符。 例如給出一個字符串:Abcds23#$_ss,它應該轉換爲Abcds23353695ss用UTF-8編碼字符java替換字符串中的特殊字符?

以下是如何做了上述的轉換: 以十六進制的UTF-8爲#是23和小數是35進制中的UTF-8爲$是24和小數是36. UTF- 8在十六進制_是5f和十進制是95.

我知道我們有String.replaceAll(String regex, String replacement)方法。但我想用特定的UTF-8等效替換特定的字符。

如何在java中執行相同操作?

+0

爲什麼「#$」變成「353695」? – niceman

+0

以下是轉換髮生的方式: #的十六進制utf-8爲23,十進制爲35 $爲十六進制的utf-8爲24,十進制爲36 _爲十六進制的utf-8爲5f和十進制是65 Sry編輯它的問題是Abcds23#$ _ss而不是Abcds23#$ ss – user2713255

+1

不要將更多信息放入註釋中,而是更新您的問題。 – GhostCat

回答

0

我不知道你怎麼定義「特殊字符」,不過這個功能應該給你一個想法:

public static String convert(String str) 
{ 
    StringBuilder buf = new StringBuilder(); 
    for (int index = 0; index < str.length(); index++) 
    { 
     char ch = str.charAt(index); 
     if (Character.isLetterOrDigit(ch)) 
      buf.append(ch); 
     else 
      buf.append(str.codePointAt(index)); 
    } 
    return buf.toString(); 
} 

@Test 
public void test() 
{ 
    Assert.assertEquals("Abcds23353695ss", convert("Abcds23#$_ss")); 
} 
+0

是的,除了字母數字字符以外的任何字符在我的情況下都是特殊字符。您的程序如何將特殊字符轉換爲UTF-8等效,因爲我無法在任何地方看到UTF-8?或者UTF-8是java中使用的默認編碼? – user2713255

+0

@ user2713255我認爲祕密在於'Character.codePointAt',是的,我認爲UTF-8是默認的 – niceman

+0

@ user2713255'Character.codePointAt'返回給定索引處的Unicode代碼點。 – splash

0

下使用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-16LEUTF-16BE(2字節序列)和UTF-32(碼分或多或少)。 .class文件中的Java字符串常量使用UTF-8。字符串由UTF-16BE char組成。和String可以給出如上的代碼點。所以Java設計使用Unicode來表示文本。

+0

爲什麼需要'cp <128'條件,它有什麼作用?在我的情況下,字母和數字以外的任何字符都被認爲是特殊字符 – user2713255

+0

有像'ü',希臘字母,阿拉伯數字等字母。純ASCII高達127,使用類字符人們也可以制定它的腳本/塊是ASCII,但這有點冗長。 –