2010-10-27 23 views

cevap

19

olmayan tüm BMP karakterleri kaldırmak için aşağıdaki çalışması gerekir:

String sanitizedString = inputString.replaceAll("[^\u0000-\uFFFF]", ""); 
+0

Bunu gerçekten test ettiniz mi? Karakter aralığınız BMP olmayan kod noktaları oluşturmak için kullanılan aralık aralığını içerdiğinden. – Anon

+2

@Anon: Kendi yanıtınızda belirttiğiniz gibi, normal ifadeler kod birimi düzeyinde değil, kod noktaları düzeyinde değerlendirilir; – axtavt

+0

Evet, bu BMP olmayan karakterlerle test edildi. –

3

BMP'nin dışındaki belirli karakterleri veya karakterleri mi arıyorsunuz?

eski, bir dize daha yüksek uçaklardan kod noktalarını içeren oluşturmak için bir StringBuilder kullanabilir ve regex beklendiği gibi çalışır:

String test = new StringBuilder().append("test").appendCodePoint(0x10300).append("test").toString(); 
    Pattern regex = Pattern.compile(new StringBuilder().appendCodePoint(0x10300).toString()); 

    Matcher matcher = regex.matcher(test); 
    matcher.find(); 
    System.out.println(matcher.start()); 

Eğer tüm olmayan kaldırmak için arıyorsanız bir dizeden -BMP karakterler, sonra regex yerine doğrudan StringBuilder kullanmak:

StringBuilder sb = new StringBuilder(test.length()); 
    for (int ii = 0 ; ii < test.length() ;) 
    { 
    int codePoint = test.codePointAt(ii); 
    if (codePoint > 0xFFFF) 
    { 
     ii += Character.charCount(codePoint); 
    } 
    else 
    { 
     sb.appendCodePoint(codePoint); 
     ii++; 
    } 
    }