【问题标题】:how to compare two strings in java?如何比较java中的两个字符串?
【发布时间】:2012-02-08 13:59:06
【问题描述】:

我有如下情况列表:字符串 A 字符串 B

我应该在以下条件下比较 A 和 B:

1-如果读取中显示的数字两边不同但其余相同,则表示A = B。

2- 在某些情况下,例如 A 侧的第一个在红色显示的数字之后没有空格,但在 b 侧,在红色显示的数字和 X 之后有一个空格。

3- 也有不同的情况,比如数字 3

现在我怎样才能最好地比较这两个字符串?

private static void controlSimilarity(String memo,String ck,String bc,String id,String product) {

           if(!id.equals(product)){

            listIdentifier.add(new MmoCnBcIdProduct(memo,ck,bc,id,product));
           }

【问题讨论】:

  • 对于案例 3,两个字符串是否相等?
  • 只比较第二个空格会起作用 - 至少对于您的示例而言。
  • 您可以尝试将第一个字符串与 RegEx 进行匹配,并尝试将第二个字符串与第一个字符串中找到的部分相匹配。

标签: java string list compare


【解决方案1】:

我会尝试“规范化”字符串。将两者都设为大写,将“\s+X\s+”替换为“X”,将“\s+%”替换为“%”,将“\s+MG”替换为“MG”等,然后用空格或一些正则表达式将其拆分(Scanner 类或 Guava 的 Splitter)并比较字符串的各个部分。

【讨论】:

    【解决方案2】:

    根据您的示例数据,我建议通过在每组数字和字符之间添加空格来规范化每个字符串。所以样本2

    TASIGNA CAPS 1X200MG  <---->  TASIGNA CAPS 112 X 200 MG
    

    会变成:

    TASIGNA CAPS 1 X 200 MG  <---->  TASIGNA CAPS 112 X 200 MG
    

    现在只需在空白处拆分并比较单个组。所有都应该是相同的,但只有一个数字组。根据您的数据类型(CAPS、COMP、CREME、...),您可能会忽略另一组。 X 之前的那个,或者 CREME 之后的那个等等。这很大程度上取决于您的数据。

    【讨论】:

    • 不,抱歉。你应该能够做到这一点。它只是基本的字符串、列表/数组的东西。您可以使用 Apache-Commons-Lang 包来简化您的任务。
    【解决方案3】:

    根据肖恩欧文的建议;大概下面Regex可以用:

    /(\w.*?)(\d+)X(\w.*)/
    

    在删除中间的任何空格后,捕获组 1 和 3 应该相等。


    1. Spilt 以空格为单位的字符串

    2. 比较 [0][1] 的拆分结果。

    3. 将所有剩余的索引组合成一个字符串。 (合并前使用trim

    4. 找到indexOfX并使用subString直到字符串结束。

    5. 使用equals OR equalsIgnoreCase 比较组合的(子)字符串。

    6. 对每组字符串从第 1 步开始重复。

    【讨论】:

    • 使用正则表达式和捕获组可能会容易得多。
    猜你喜欢
    • 1970-01-01
    • 2014-11-15
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 2010-09-16
    • 2012-06-19
    • 1970-01-01
    相关资源
    最近更新 更多