Java Version Differences
本章開頭已經提到,本書主要針對Java 1.5.0。不過,目前Java 1.4.2仍然在廣泛應用,而Java 1.6已經整裝待發(已經發佈了beta版,但不會很快發佈正式版)。所以,我得簡要地提一下1.4.2和1.5.0(Update 7)之間的差異,以及1.5.0和目前的1.6「build 59g」的差異。
1.4.2和1.5.0之間的差異
Differences Between 1.4.2 and 1.5.0
相對Java 1.4.2,Java 1.5.0添加了許多新的方法。大多數新的方法主要是為了支持Matcher的檢索範圍。此外,Unicode支持也升級並提高了效率。所有的變化都在下面兩節詳細介紹(注9)。
1.5.0中的新方法
與檢索範圍相關的Matcher方法都沒有出現在Java 1.4.2中:
●region
●regionStart
●regionEnd
●useAnchoringBounds
●hasAnchoringBounds
●useTransparentBounds
●hasTransparentBounds
Java 1.4.2也不包含下面的方法:
●toMatchResult
●hitEnd
●requireEnd
●usePattern
●toString
Java 1.4.2不包含下面這個static方法:
●Pattern.quote
1.4.2和1.5.0關於Unicode支持的差異
1.4.2和1.5.0在Unicode相關的問題上有這些變化:
●Java 1.4.2的Unicode使用的是Unicode Version 3.0.0,1.5.0使用的是Unicode Version 4.0.0。這個改變影響到很多方面,例如字符的定義(例如,在Version 3.0.0中,\uFFFF之後是沒有代碼點的),以及屬性和Unicode區塊的定義。
●增強了通過「\p{…}」和「\P{…}」引用區塊的方式(參加 Java 關於 Character.UnicodeBlock的文檔,得到區塊列表及其正式名稱)。
Java 1.4.2中的規則是「去掉官方代碼塊名字中的空格,和開頭的In」。這樣,區塊引用就類似\p{InHangulJamo}和\p{InArabicPresentationForms-A}。
1.5.0 添加了兩種新的區塊命名。可以在官方塊名稱之前直接添加『In』,所以名字可以為\p{InHangul·Jamo}和\p{InArabic·Presentation·Forms-A}。也可以給Java的區塊標識符添加前綴『In』(是官方名稱,將空格和連字符替換為下畫線)\p{InHangul_Jamo}和\p{InArabic_Presentation_Forms_A}。
●Java 1.4.2存在一個古怪的bug,Arabic Presentation Forms-B和Latin Extended-B結尾的「B」必須寫作「Bound」,也就是說\p{InArabicPresentationForms-Bound}和\p{InLatinExtended-Bound}。
●Java 1.5.0中Character類的isSomeing方法支持正則表達式(☞369)。
1.5.0和1.6之間的差異
Differences Between 1.5.0 and 1.6
寫作本書時已經發佈的1.6和1.5.0在正則表達式的問題上只有兩個細微的差別:
●Java 1.6提供了之前沒有的對Pi和Pf的Unicode分類的支持。
●「\Q…\E」結構的bug已經修正了,所以在字符組中可以正常工作。