2017-03-27 16 views
1

投稿する前に文字列分割( "\ u")または\ uまたは\ uを使用してみました。ユニコード文字と見なされますが、この場合はそうではありません。次の文字列 "abc u12345"を含む文字列をで分割します。

+1

しかし、 ' '\''と ' 'u'' **があり、ここではない、単一の文字**。 '\ u12345'は** single charactedr **です。それは "エスケープ"するために使用されます。 –

+0

Unicode文字です。 JavaはそれをUnicode文字として使用します – Jens

+0

文字列リテラル '' abc \ u12345 ''は' 'abcሴ5" 'のエスケープされたバージョンです。つまり、' 'a' '(U + 0061)'' b'' (U + 0063) ''ሴ''(U + 0062) '' c ''(U + 1234)' '5'(U + 0035)です。 'split(" \\ u ")'や 'split("ሴ ")'という文字列には実際には存在しないので、文字列に '' \ '(U + 005C) '' U'(U + 0075)の代わりに ''\''の文字が含まれていれば 'split(" \\ u ")'が働くでしょう –

答えて

2

すでに述べたように、\ u12345はユニコード文字なので、単一のシンボルとして扱われます。 文字列にこれらの文字列がある場合は、すでに遅すぎます。これをファイルまたはネットワーク経由で取得した場合は、入力した文字列を読み込み、文字列変数に格納して作業する前に、それぞれの\または\ uをエスケープすることができます。

タスクのコンテキストをもう少し詳しく説明すると、おそらく他の解決策が見つかるかもしれません。

1

これを試してください。あなたはJavaはそうUnicode文字としてそれを理解し、適切に

split("\\\\u") 

または

split(Pattern.quote("\\u")) 
2

をエスケープしていなかった、行うには正しい事はそれを正しく読んでいない場合は、JavaにUnicodeを渡す避けるために、ソースを更新することになります必要です。

文字列全体を文字配列に変換し、文字が128より大きいかどうかを確認し、そうであれば残りの配列を別々のStringBuilderに追加することができます。それは以下の助けを参照してください:

public static void tryMee(String input) 
{ 
    StringBuilder b1 = new StringBuilder(); 
    StringBuilder b2 = new StringBuilder(); 
    boolean isUni = false; 

    for (char c : input.toCharArray()) 
    { 
     if (c >= 128) 
     { 
      b2.append("\\u").append(String.format("%04X", (int) c)); 
      isUni = true; 
     } 
     else if(isUni) b2.append(c); 
     else b1.append(c); 
    } 

    System.out.println("B1: "+b1); 
    System.out.println("B2: "+b2); 
} 
+0

作品 – Shashidhar

+0

喜んで助けました。可能であれば、これを回答として受け入れてください。 – PankajT

1
import java.util.Arrays; 

public class Example { 

    public static void main (String[]args){ 
     String str = "abc\u12345"; 
     // first replace \\u with something else, for example with -u 
     char [] chars = str.toCharArray(); 
     StringBuilder sb = new StringBuilder(); 
     for(char c: chars){ 
      if(c >= 128){ 
       sb.append("-u").append(Integer.toHexString(c | 0x10000).substring(1)); 
      }else{ 
       sb.append(c); 
      } 
     } 
     String replaced = sb.toString(); 

     // now you can split by -u 
     String [] splited = sb.toString().split("-u"); 
     System.out.println(replaced); 
     System.out.println(Arrays.toString(splited)); 
    }  
} 
関連する問題