【问题标题】:Java string normalizationJava 字符串规范化
【发布时间】:2020-02-12 15:43:57
【问题描述】:

是否有 Java 库可以通过删除空格/特殊字符、小写所有字母来规范化字符串,例如:S-cube Abc' Inc. 到 scubeabcinc?

【问题讨论】:

  • s = s.replaceAll("\\W", "").toLowerCase();

标签: java normalization


【解决方案1】:

有java.text.Normalizer。 Java 以 Unicode 格式保存文本,é 可以写成一个 Unicode 符号、代码点或两个,一个e 和一个零宽度'。 Unicode 规范化非常重要,对于字典、文件名。 Normalizer 可用于分解为字母和重音符号(变音符号),并使用 regex replaceAll 删除所有重音符号。

Character 支持 Unicode,为代码点提供 Unicode 名称,将代码点分类为字母、数字、多个脚本等。

Collate,面向区域设置,为单词创建特定键,用于排序,如Comparator。在一个语言环境中,顺序可能是 AaBbCcĉD.. 而在另一个 ABC...abc 等。 Locale 指定大写字母。例如,在土耳其语中有一个字母 i-without-dot Iı 和 i-with-dot İi。

然后是您的用例:减少。例如,用于声音相似表示的 soundex 算法(第三方)。正则表达式可以删除与String.replaceAll 的插接等。

【讨论】:

  • 你总结得很好。 OP 应该进一步澄清他的用例,可能他需要处理所有这些复杂性。
【解决方案2】:

除了 String 之外,不需要库,String.replaceAll 和 String.toLowerCase 可以满足您的需求:

  String s = "S-cube Abc' Inc.";
  s = s.replaceAll("[^a-zA-Z]", "").toLowerCase();

【讨论】:

    【解决方案3】:

    不需要库。只需使用正则表达式和String#toLowerCase:

    String s = "S-cube Abc' Inc.";
    s = s.replaceAll("[^a-zA-Z]", "");
    s = s.toLowerCase();
    System.out.println(s);
    

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 2010-10-10
      • 2018-09-29
      • 2012-04-25
      • 1970-01-01
      • 2013-06-29
      • 2019-04-19
      • 2016-07-06
      • 1970-01-01
      相关资源
      最近更新 更多