如何在java中比较两个字符串?

时间:2012-01-12 09:02:25

标签: java string list compare

我有以下情况列表:字符串A< ------->字符串B

enter image description here

我应该将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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

肖恩欧文的建议之后;可能会使用以下Regex

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

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


  1. Spilt字符串按空格

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

  3. 合并所有剩余索引以生成单个字符串。 (在合并前使用trim

  4. 找到indexOf X并使用subString直到字符串结尾。

  5. 使用equalsequalsIgnoreCase来比较组合(子)字符串。

  6. 对每组字符串重复步骤1。

答案 2 :(得分:0)

根据您的示例数据,我建议通过在每组数字和字符之间添加空格来规范化每个字符串。所以样本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之后的那个等。这很大程度上取决于你的数据。