【问题标题】:String Compare Library字符串比较库
【发布时间】:2010-01-06 14:26:21
【问题描述】:

我正在寻找一个 Java 5 图书馆,它可以让我比较一些文本,因为以下行返回 true:

  • " foo bar " == "foo bar"
  • "foo\nbar" == "foo bar"
  • "foo\tbar" == "foo bar"
  • "féé bar" == "fee bar"
  • 等等……

有什么建议吗?

【问题讨论】:

  • 是的,就像一个正则表达式。但多合一。
  • Java的String.matches()不够用吗?
  • 作为一个简短的说明,在比较对象(例如String)时,使用equals 方法而不是== 运算符。 == 运算符将比较对象引用。
  • 为什么"féé bar" == "fee bar" 永远是平等的?
  • @coobird:是的,当然,这不是我想要使用的 java 语法,而是解释它相等的语法。

标签: java string


【解决方案1】:

我认为您不会找到具有这些特定规则的库。您必须自己编写代码。对于某些规则,正则表达式甚至 String 框架方法可能很有用,但是对于最后一条规则,我认为您必须为这些特殊字符保持相等的 Map。然后,您必须使用此 Map 遍历字符串中的每个字符来比较它们。而且,由于您已经在遍历字符串,也许您可​​以在一次迭代中应用所有规则,避免使用正则表达式。

【讨论】:

  • 没有完美的答案,但您的答案很详尽。但是我没有使用地图,而是在正则表达式 (f.i. [êéèë]) 中使用了一组 char 和 replaceAll。
【解决方案2】:

【讨论】:

    【解决方案3】:

    听起来你想写一个方法来根据你的规则“规范化”你的字符串,然后再比较它们。使用trim 作为第一条规则,使用多个replaceStringUtils.replaceChars() 作为其他规则。

    【讨论】:

      【解决方案4】:

      它没有您直接指定的功能,但您也可以使用 google-guava 库中的 CharMatcher 函数:http://code.google.com/p/guava-libraries/

      【讨论】:

        【解决方案5】:

        ICU 库中似乎有删除变音符号的功能:

        http://site.icu-project.org/

        其余的你可能可以用一个或多个正则表达式来完成。

        【讨论】:

        • Shot,在 JDK 1.6 中,您可以使用 java.text.Normalizer 来删除变音符号!以前这是一个 Sun 内部类。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-06
        • 1970-01-01
        相关资源
        最近更新 更多