如何从Java中的任何字符串中获取字母数字字符串?

时间:2012-07-18 08:10:12

标签: java string

  

可能重复:
  ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ --> n or Remove diacritical marks from unicode chars
  How to replace special characters in a string?

我想将"I>Télé"之类的字符串格式化为"itele"之类的字符串。 我的想法是我希望我的String是小写(完成),没有空格(完成),没有重音或特殊字符(如></,{{1 },%~é@等。

可以删除特殊字符的出现,但我想在删除重音时保留字母(就像我在我的例子中所做的那样)。这就是我所做的,但我不认为好的解决方案是用“e”替换每个é,è,ê,ë,而不是再为“i”,“a”等替换,然后删除每一个特殊的人物...

ï

这样做的目的是为Android应用提供有效的资源文件名,所以如果您有任何其他想法,我会接受它!

3 个答案:

答案 0 :(得分:13)

您可以使用java.text.Normalizer类将文本转换为普通拉丁字符,然后在可能的情况下将其转换为变音符号(重音符号)。因此,例如,单字符字符串"é"将成为两个字符串['e', {COMBINING ACUTE ACCENT}]

完成此操作后,您的String将是非重音字符,重音修饰符和您提到的其他特殊字符的组合。此时,您可以仅使用白名单来过滤字符串中的字符,以保留您想要的内容(对于正则表达式而言,这可能就像[A-Za-z0-9]一样简单,具体取决于您所追求的内容)。

方法可能如下:

String name ="I>télé"; //example
String normalized = Normalizer.normalize(name, Form.NFD);
String result = normalized.replaceAll("[^A-Za-z0-9]", "");

答案 1 :(得分:0)

尝试使用ascii代码。 may this link will help

答案 2 :(得分:0)

您可以执行类似

的操作
String res = ""
for (char c : name.toCharArray()) {
    if (Character.isLetter(c) ||Character.isDigit(c))
        res += c    
}

//Normalize using the method below

http://blog.smartkey.co.uk/2009/10/how-to-strip-accents-from-strings-using-java-6/

public static String stripAccents(String s) {    
    s = Normalizer.normalize(s, Normalizer.Form.NFD);   
    s = s.replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
    return s;
}