如何比较字符串而忽略特定字符

我知道这有类似的线程,但大多数只涉及忽略空格。

我必须使用一些写得不好的数据表来编写应用程序,因此我经常需要比较这样的事情:包装,包装,包装,包装,包装

这些都应该被认为是平等的,因为它们都是一个包。但是,没有一个制作这些数据表的人彼此沟通,所以现在我可以处理它。

如何在忽略括号,空格,'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,""));}


米琪卡哇伊
浏览 734回答 3
3回答

紫衣仙女

这个: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

您可以使用:s1.replaceAll("\\W|s\\)?$", "").equals("pack"); // true要么:s1.replaceAll("\\W|s", "").equals("pack"); // true如果你不关心任何其他小号字符串中的字符。“\ W |?s \)$”将删除一切,是不发一言的性格和任何小号底。如果你知道不会有其他小号的话,但最后一个,那么你可以使用这个简单表示:“\ W | S”。它将删除所有不是单词字符和字符串中任何s的内容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java