为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米琪卡哇伊 2019-04-18 18:15:57
我知道这有类似的线程,但大多数只涉及忽略空格。我必须使用一些写得不好的数据表来编写应用程序,因此我经常需要比较这样的事情:包装,包装,包装,包装,包装这些都应该被认为是平等的,因为它们都是一个包。但是,没有一个制作这些数据表的人彼此沟通,所以现在我可以处理它。如何在忽略括号,空格,'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();}


查看完整回答
反对 回复 2019-05-15
?
LEATH

TA贡献1936条经验 获得超6个赞

您可以使用:

s1.replaceAll("\\W|s\\)?$", "").equals("pack"); // true

要么:

s1.replaceAll("\\W|s", "").equals("pack"); // true

如果你不关心任何其他小号字符串中的字符。

“\ W |?s \)$”将删除一切,是不发一言的性格和任何小号底。

如果你知道不会有其他小号的话,但最后一个,那么你可以使用这个简单表示:“\ W | S”。它将删除所有不是单词字符和字符串中任何s的内容。


查看完整回答
反对 回复 2019-05-15
  • 3 回答
  • 0 关注
  • 733 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信