我知道这有类似的线程,但大多数只涉及忽略空格。我必须使用一些写得不好的数据表来编写应用程序,因此我经常需要比较这样的事情:包装,包装,包装,包装,包装这些都应该被认为是平等的,因为它们都是一个包。但是,没有一个制作这些数据表的人彼此沟通,所以现在我可以处理它。如何在忽略括号,空格,'s'字符的同时比较字符串,并确保在比较之前所有内容都是小写的?我现在所拥有的只是:private boolean sCompare(String s1, String s2){
return s1.equalsIgnoreCase(s2)}显然它并不多,除了直接比较两个小写字符串之外什么都不做,但我不确定正确的方法来获得我需要的结果。对于上面的示例,新的比较函数应返回true,而在比较以下内容时则返回false:Pack(s)和Case(s),Packs和Case(s)等。编辑 使用最佳答案的帮助,我创建了一个适合我需要的功能private boolean sCompare(String s1, String s2){
String rx = "[\\se(s)|s$]";
return (s1.toLowerCase().replaceAll(rx,"")).equals(s2.toLowerCase().replaceAll(rx,""));}
3 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
这个:
public static void main(String[] args) throws Exception { String REGEX = "\\(s\\)|s$"; System.out.println("Packs".replaceAll(REGEX, "") .toLowerCase()); System.out.println("packs".replaceAll(REGEX, "") .toLowerCase()); System.out.println("Pack(s)".replaceAll(REGEX, "") .toLowerCase()); System.out.println("pack(s)".replaceAll(REGEX, "") .toLowerCase()); System.out.println("pack".replaceAll(REGEX, "") .toLowerCase());}
产量:
pack pack pack pack pack
所以这应该这样做:
private static boolean sCompare(String s1, String s2) { return discombobulate(s1).equals(discombobulate(s2));}private static String discombobulate(String s) { String REGEX = "\\(s\\)|s$"; return s.replaceAll(REGEX, "") .toLowerCase();}
LEATH
TA贡献1936条经验 获得超6个赞
您可以使用:
s1.replaceAll("\\W|s\\)?$", "").equals("pack"); // true
要么:
s1.replaceAll("\\W|s", "").equals("pack"); // true
如果你不关心任何其他小号字符串中的字符。
“\ W |?s \)$”将删除一切,是不发一言的性格和任何小号底。
如果你知道不会有其他小号的话,但最后一个,那么你可以使用这个简单表示:“\ W | S”。它将删除所有不是单词字符和字符串中任何s的内容。
添加回答
举报
0/150
提交
取消