簡體   English   中英

如何在Java中比較兩個字符串?

[英]how to compare two strings in java?

我有如下情況列表:字符串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));
           }

我會嘗試“標准化”字符串。 將兩個字母都大寫,將“ \\ s + X \\ s +”替換為“ X”,將“ \\ s +%”替換為“%”,將“ \\ s + MG”替換為“ MG”等,然后按空格或某些正則表達式進行拆分(掃描程序類或Guava的Splitter)並比較字符串的各個部分。

根據肖恩·歐文的建議; 可能可以使用以下正則Regex

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

並且在捕獲組1和捕獲組3之間放置任何空格后,它們應該相等。


  1. 通過空間Spilt琴弦

  2. 比較分割結果的[0][1]

  3. 合並所有其余索引以組成一個字符串。 (合並前使用trim

  4. 找到indexOf X並使用subString直到字符串結尾。

  5. 使用equalsequalsIgnoreCase比較組合的(子)字符串。

  6. 對於每組字符串,從步驟1重復。

根據您的樣本數據,我建議通過在每組數字和字符之間添加空格來規范化每個字符串。 所以樣本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之后的一個,等等。這在很大程度上取決於您的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM