SORU
19 Ocak 2011, ÇARŞAMBA


Boşluk Eşleşen Düzenli İfade - Java

regular expressions Java API \s boşluk maç olacağını belirtiyor. Normal ifade \\s\\s iki boşluk aynı olmalıdır.

Pattern whitespace = Pattern.compile("\\s\\s");
matcher = whitespace.matcher(modLine);
while (matcher.find()) matcher.replaceAll(" ");

Bunun amacı, tek bir boşluk ile iki ardışık boşluk tüm örneklerini değiştirmek için. Ancak bu aslında çalışmıyor.

Bir mezar yukarıdaki diyagram ya da terimin yanlış anlama yaşıyorum""? boşluk

CEVAP
19 Ocak 2011, ÇARŞAMBA


Sen bir insan değilsin \s Java maç boşluk kendi yerel karakter kümesi, çünkü Java yok destek Unicode boşluk özellik olsa da bunu yaparken kesinlikle gerekli tanışmak UTS#18’s RL1.2! Ne var değil standartlara uygun, ne yazık ki.

Unicode \p{White_Space} 26 kod noktaları tanımlar: 20 \pZ çeşitli türleri vardırGeneralCategory=Ayırıcıkalan 6 \p{Cc}, ve=Kontrol GeneralCategory.

Boşluk oldukça istikrarlı bir özelliktir ve bu aynı kişiler etrafında neredeyse ezelden beri var. Hatta bu yüzden, Java bunlar için Unicode Standardına uyan hiç bir özelliği vardır, senin yerine bu kodu kullanın.

String whitespace_chars =  ""       /* dummy empty string for homogeneity */
                          "\\u0009" // CHARACTER TABULATION
                          "\\u000A" // LINE FEED (LF)
                          "\\u000B" // LINE TABULATION
                          "\\u000C" // FORM FEED (FF)
                          "\\u000D" // CARRIAGE RETURN (CR)
                          "\\u0020" // SPACE
                          "\\u0085" // NEXT LINE (NEL) 
                          "\\u00A0" // NO-BREAK SPACE
                          "\\u1680" // OGHAM SPACE MARK
                          "\\u180E" // MONGOLIAN VOWEL SEPARATOR
                          "\\u2000" // EN QUAD 
                          "\\u2001" // EM QUAD 
                          "\\u2002" // EN SPACE
                          "\\u2003" // EM SPACE
                          "\\u2004" // THREE-PER-EM SPACE
                          "\\u2005" // FOUR-PER-EM SPACE
                          "\\u2006" // SIX-PER-EM SPACE
                          "\\u2007" // FIGURE SPACE
                          "\\u2008" // PUNCTUATION SPACE
                          "\\u2009" // THIN SPACE
                          "\\u200A" // HAIR SPACE
                          "\\u2028" // LINE SEPARATOR
                          "\\u2029" // PARAGRAPH SEPARATOR
                          "\\u202F" // NARROW NO-BREAK SPACE
                          "\\u205F" // MEDIUM MATHEMATICAL SPACE
                          "\\u3000" // IDEOGRAPHIC SPACE
                        ;        
/* A \s that actually works for Java’s native character set: Unicode */
String     whitespace_charclass = "["    whitespace_chars   "]";    
/* A \S that actually works for  Java’s native character set: Unicode */
String not_whitespace_charclass = "[^"   whitespace_chars   "]";

Şimdi replaceAll desen whitespace_charclass " " kullanabilirsiniz.


=begin soapbox

Özür dilerim.Java yukarıdaki diyagram sadece kendi yerel karakter seti üzerinde çalışmak yokve bu yüzden gerçekten egzotik çemberin içinden onları çalışması için atlamak zorunda.

Ve eğer boşluk kötü olduğunu düşünüyorsan, \w \b nihayet düzgün bir şekilde hareket ettirmek için ne görmelisiniz!

Evet, bu mümkün, ve evet, mindnumbing bir karmaşa var. O, bile yardımsever davranıyor. Java standartları-comforming düzenli bir kitaplık almak için en kolay yolu, YOĞUN bakım eşyaları için JNI etmektir. Google OraSun şey ölçmek değil, çünkü Android için yaptığı şey.

Eğer istemiyorsan bunu yapmak istiyorum ama hala sopa ile Java, ben bir ön uç normal ifade yeniden kütüphane yazdığım “düzeltmeler” Java formasyonu, en azından onlara uygun şartları RL1.2a in UTS#18, Unicode Regular Expressions.

=end soapbox

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canal de arkyoru

    Canal de ark

    18 Ocak 2007
  • Good Creative Academy

    Good Creativ

    19 Kasım 2009
  • Trevor Eckhart

    Trevor Eckha

    19 Aralık 2009