如何知道一个字符串是否包含口音?如何知道一个字符串是否包含口音
回答
我认为你可以做的最好的事情就是使用一个标准化器,它将带有重音符的unicode字符分成两个独立的字符。 Java在类Normalizer
中包括这个,参见here。
此,例如,将分裂
U+00C1 LATIN CAPITAL LETTER A WITH ACUTE
到
U+0041 LATIN CAPITAL LETTER A
U+0301 COMBINING ACUTE ACCENT
,并会做这对于具有重音符号或其他变音标记(http://en.wikipedia.org/wiki/Diacritic)每个字符。
然后你可以检查产生的CharSequence
是否有一些重音字符(并且这意味着硬编码它们),或者简单地检查标准化版本是否等于起始字符,这意味着没有任何已分解的字符。 Java Normalizer
已在isNormalized(CharSequence src, Normalizer.Form form)
中有此功能,但您应该查看各种表单以查看是否有适合您的需求的表单。
编辑:如果你只需要基本的口音的支持(像是刚èE中的O I U)你可以去大江户选择,如果你需要为所有现有的口音全力支持,更是疯狂硬编码他们都..
如果您在\ p {Mn}上匹配,我认为您可以过滤掉所有组合标记(这是标记的一般类别,非间隔)。 – wds 2010-05-05 15:27:29
要做到这一点是使用normalize(str,NFD)
从java.text.Normalizer
,然后删除普通类马克\pM
或无空格的字符的正确方法什么口音加马克\p{Mn}
。 Java不支持标准Unicode属性\p{Diacritic}
或者您可以使用它。请注意,并非所有的变音符号都是非间距符号,反之亦然。
但是,这可能是错误的事情。如果您尝试执行不区分重音的字符串搜索和比较,则正确的方法是将字符串保持原样。您需要创建一个级别设置为1(或者说,PRIMARY)的UCA排序规则对象,然后使用它来比较您的字符串。如果字符串在主要强度上比较相等,则忽略重音标记等内容。
Here are examples在Java中如何使用ICU的Collator类来做到这一点。如果你使用正确的UCA collators,那么你不必规范化;他们为你照顾这件事。
This answer在Perl中使用了两个UCA collator对象,一个用于主要强度以完全忽略用于字符串搜索和比较的重音符号,另一个用于允许区分次要强度的变音符号与Unicode的正常区别。
- 1. JAVA ArrayList:如何知道它是否包含一个字符串数组?
- 2. 如何知道如果一个字符串包含在Java中
- 3. 我如何知道我的字符串是否包含“micro”Unicode字符?
- 4. 如何知道一个NSMutableArray是否包含一个对象?
- 5. 如何检查一个字符串是否包含一个子字符串 - mysql
- 6. 如何找到一个字符串是否包含在另一个字符串
- 7. 如何检查一个字符串是否包含任何一些字符串
- 8. 如何知道UITextField是否包含特定字符
- 9. Java,如何检查一个字符串是否包含数字?
- 10. 如何检查一个TextView是否包含某个字符串
- 11. Javascript - 如何检查一个字符串是否包含多个子字符串
- 12. Applescript:检查一个字符串是否包含空字符串?
- 13. flash:我怎么知道一个字符串包含子字符串的次数?
- 14. 如何检查字符串是否包含某个字符?
- 15. 如何检查一个字符串是否包含zalgo文本?
- 16. 如何检查一个字符串是否包含char?
- 17. 如何检查一个字符串是否包含在ArrayList中?
- 18. 如何判断一个字符串是否包含Guid作为子字符串?
- 19. 确定是否一个字符串包含一个字
- 20. 如何确定一个字符串是否包含非字母数字字符?
- 21. 确定一个字符串是否包含任何一组字符串
- 22. 如何知道给定的字符串是否是来自Java中另一个字符串的子字符串
- 23. 如何检查一个字符串是否包含两个星号字符?
- 24. 如何检查一个字符串是否包含两个相同的字符?
- 25. MYSQL搜索一个字符串是否包含特殊字符?
- 26. 检查一个字符串是否只包含特殊字符
- 27. 如何检查一个字符串是否包含来自另一个字符串的任何字符?
- 28. 加入一个字符串是否包含在另一个字符串
- 29. 查看一个字符串是否包含另一个字符串
- 30. 有效检查一个字符串是否包含另一个字符串
'''口音?是“\'”一个口音? – kennytm 2010-05-05 14:58:00
accents =èèèè... – Mercer 2010-05-05 14:58:28
这不是一个答案。有很多很多的变音符号超出了你的想象:http://blogs.msdn.com/michkap/archive/2006/02/17/533929.aspx你必须根据“重音”来决定你的意思。这不像你想象的那么简单。 – 2010-05-05 15:15:50