2017-04-12 180 views
58

我需要修改類似於「¼杯糖」的字符串爲「糖杯」,即用「」替換所有小數符號。從字符串中刪除「¼」和「½」等所有小數符號

我已經提到這post和管理,以去除¼使用此行:

itemName = itemName.replaceAll("\u00BC", ""); 

但我怎麼更換每一個可能的分數符號在那裏?

+0

什麼有關刪除所有的非字母數字字符,除了空間:使用 :itemName.replaceAll( 「[^ A-ZA-Z0-9]」, 「」); –

+2

Java不是Android – Ungeheuer

+0

@Unngeheuer明白了。標籤已移除。 – Michelle

回答

92

¼½等分數符號屬於Unicode類別Number, Other [No]。如果您沒有問題消除在該組中的所有676個字符,你可以使用下面的正則表達式:

itemName = itemName.replaceAll("\\p{No}+", ""); 

如果沒有,你總是可以列出他們明確:

// As characters (requires UTF-8 source file encoding) 
itemName = itemName.replaceAll("[¼½¾⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞↉]+", ""); 

// As ranges using unicode escapes 
itemName = itemName.replaceAll("[\u00BC-\u00BE\u2150-\u215E\u2189]+", ""); 
+2

請注意,字體可能呈現_any_序列像23/12一樣分數,因此可以顯示任何分數,而不僅僅是預先組成的分數。如果發生這種情況,您可能需要刪除的不僅僅是一個字符列表 – Joey

+0

爲什麼+ in正則表達式嗎?難道你只是簡單地忽略它或者爲了效率而做任何事情嗎? – HopefullyHelpful

+0

@HopefullyHelpful在這種情況下,'+'操作符會導致字符集('[[...]')重複多次看到這個答案更多詳細信息:http://stackoverflow.com/a/3850256/3088508 –

1

您可以使用下面的正則表達式用空字符串替換所有分數。

str = str.replaceAll("(([\\xbc-\\xbe])?)", "") 
+5

爲什麼額外的捕獲組「()」和可選的「?」匹配? – MT0

+11

你知道,爲了以防萬一,你想用「」替換「」 – HopefullyHelpful

相關問題