2017-04-12 275 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

相关问题