【问题标题】:How to get an alphanumeric String from any string in Java? [duplicate]如何从 Java 中的任何字符串中获取字母数字字符串? [复制]
【发布时间】:2012-07-18 08:10:11
【问题描述】:

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

我想将一些字符串(例如"I>Télé")格式化为"itele"。 这个想法是我希望我的字符串是小写(完成),没有空格(完成),没有重音或特殊字符(如></%~,@ 987654331@、@ï 等)。

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

String name ="I>télé" //example
String result = name.toLowerCase().replace(" ", "").replace("é","e").........;

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

【问题讨论】:

  • 也许this的回答能帮到你?

标签: java string


【解决方案1】:

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

完成此操作后,您的字符串将是非重音字符、重音修饰符和您提到的其他特殊字符的组合。此时,您可以仅使用白名单过滤字符串中的字符以保留您想要的内容(对于正则表达式,这可能与 [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]", "");

【讨论】:

  • 感谢提供的链接,我找到了this。解决方案将是这个和 replaceAll("[^A-Za-z0-9]", "") 的组合。非常感谢!
  • +1 在 Normalizer 的思考
  • 非常感谢。这为我节省了很多时间和丑陋的正则表达式!
【解决方案2】:

你可以这样做

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;
}

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 2014-06-14
      • 2013-07-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多