我有以下情况列表:字符串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));
}
答案 0 :(得分:1)
我会尝试“规范化”字符串。将两者都设为大写,将“\ s + X \ s +”替换为“X”,将“\ s +%”替换为“%”,将“\ s + MG”替换为“MG”等,然后将其拆分为空格或一些正则表达式(Scanner类或Guava的Splitter)并比较字符串的部分。
答案 1 :(得分:0)
肖恩欧文的建议之后;可能会使用以下Regex
:
/(\w.*?)(\d+)X(\w.*)/
并且在删除其间的任何空格后,捕获组1和3应该相等。
Spilt
字符串按空格。
比较分割结果的[0]
和[1]
。
合并所有剩余索引以生成单个字符串。 (在合并前使用trim
)
找到indexOf
X
并使用subString
直到字符串结尾。
使用equals
或equalsIgnoreCase
来比较组合(子)字符串。
对每组字符串重复步骤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之后的那个等。这很大程度上取决于你的数据。