2013-04-14 34 views
-4

爲什麼Java 1.7中的Character.isSpaceChar('\u0009')返回false?這個字符也被稱爲'\ t'或以英文字符串爲基礎:「水平標籤」。根據我的眼睛和Wikipedia一樣,這個字符空格。但Java報告錯誤!爲什麼Java Character.isSpaceChar(char)將水平製表標記爲空白?

我也嘗試在unicode.org上找到一些打印所有字符類別的列表或表格(我的最終目標是找到代碼點和類別Zi,Zp,Zs *之間的官方映射)無濟於事。

*其實現在我再次撒謊。我的最終目標是測試Java是否能夠計算空白並編寫我自己的庫(可以實際計算)(他也應該刪除換行符)。或者,我是否應該將這種科學留給着名的\s模式?

+1

答案 - 因爲這就是*指定*所要做的。閱讀javadoc ... *之前*提問。 –

+0

告訴所有的stackoverflow的訪問者,看看這個網站是否仍然存在=)如果你真的想成爲一個很好的運動,請嘗試閱讀我的整個職位和下面的評論下面之前downvoting。我現在要說的是,我已經完成了我閱讀文檔的份額。 –

+1

方法名是'.isWhiteSpaceChar' ...?不,不是,所以你的問題是什麼? – CBroe

回答

8

爲什麼Java 1.7中的Character.isSpaceChar('\u0009')返回false?

因爲isSpaceChar不檢查空白字符,it checks for spaces(Unicode有一個以上的空格字符)。

如果你想檢查空白,有isWhitespace(使用空白的的Java定義)。

是的,\s確實檢查(Java的定義)空白(不只是空格),specifically [ \t\n\x0B\f\r]

如果你想使用空白的的Unicode定義你的程序,我沒有立即看到無論是Character方法或預定義正則表達式類,它說,它做到這一點。 Unicode協會提供了很多code charts,但是,包括空白的this one,所以它應該很容易創建。不要拿我的話(只是快速閱讀圖表),但例如:

Pattern p = new Pattern("[ \\u0009-\\u000D\\u0085\\u180E\\u2028\\u2029\\u3000\\u1680\\u2000-\\u2006\\u2008-\\u200A\\u205F\\u00A0\\u2007\\u202F]"); 

...看起來它可能會匹配它。或者一個等價的函數切換這些值。

+0

根據[維基百科文章](http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters#Spaces),比[[\ t \ n \ x0B \ f \ r]'更多的字符是空格。根據我在我的問題中發佈的鏈接,我們獲得了更多與更廣泛的術語空白匹配的字符。所以,我想從Unicode中看到一個來源究竟是什麼空間或空白字符。我甚至無法掌握哪些字符屬於類別Character.isSpaceChar(char):s API文檔列表。 –

+2

@MartinAndersson:是的,但是你不使用維基百科文章來告訴你什麼是Java API函數。你使用Java API文檔。 :-)如果您想根據Unicode定義知道字符是否爲空格,我不會立即看到「Character」方法或預定義的正則表達式類,它會這樣做。 Unicode聯盟提供了許多[代碼圖](http://www.unicode.org/charts/uca/),包括[這一個](http://unicode.org/charts/uca/chart_Whitespace.html)對於空白,所以它應該很容易創建。 –

+0

@MartinAndersson:我已將該評論的信息添加到答案中。 –

4

按照documentation,有三類人物被確認爲空格:

  • SPACE_SEPARATOR
  • LINE_SEPARATOR
  • PARAGRAPH_SEPARATOR

標籤不符合上述任一類別(它是HORIZONTAL TABULATION),所以isSpaceChar正確地爲它返回false

我的最終目標是測試Java的不可忽視的能力空白

Character.isWhitespace功能是一個很大的包容性 - 特別是,它包括HORIZONTAL TABULATION類別。也許這就是你應該使用的功能。

+0

爲什麼水平製表符不會成爲'SPACE_SEPARATOR','LINE_SEPARATOR'或'PARAGRAPH_SEPARATOR'的一部分,您是否有源代碼(我希望鏈接到unicode.org上的子頁面!)? –

+0

@MartinAndersson [Here](http://unicode.org/cldr/utility/list-unicodeset.jsp?a=\p {subhead = Spaces})是unicode.org上的一個表格,它列舉了所有的Unicode空間;標籤不在其中。 – dasblinkenlight