You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中String类contains方法检测.、+、@符号失效问题求助

问题根因

核心问题出在replaceAll方法的使用上:

  • replaceAll的第一个参数是正则表达式,.在正则语法中是匹配任意单个字符的通配符,不是只代表字面量.字符。你调用replaceAll(".","")会直接把整个本地名(localName)的所有字符全部清空,不是你预期的只删除.。
  • 你观察到的contains失效、+检测失效都是假象:前两个邮箱的本地名确实包含.,所以进入了if分支执行replaceAll,执行后本地名直接变成空字符串,后续自然找不到+,最终因为长度为0不会被加入集合,所以才出现你输出里前两个处理完都是空的情况。第三个邮箱本地名本身没有.,没进入replaceAll分支,所以处理正常。
修复方案

把替换.的代码换掉,二选一即可:

  1. 对.做正则转义,适配replaceAll的规则:
localName = localName.replaceAll("\\.", "").trim();
  1. 更推荐直接使用不需要正则的replace方法,该方法会替换所有匹配的字面量字符,更符合当前场景需求:
localName = localName.replace(".", "").trim();
其他优化建议

你代码中if(domainName.length() <= 1)分支只打印了0,没有终止当前邮箱的后续处理,无效域名仍会走到后续逻辑,可以补充continue跳出当前循环:

if(domainName.length() <= 1) {
    System.out.println(0);
    continue;
}
修正后完整代码
public static void main(String[] args) {
    String[] emails = {"test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"};

    if(emails == null || emails.length == 0) {
        System.out.println(0);
        return;
    }

    HashSet<String> emailsSet = new HashSet<>();

    for(int i = 0; i < emails.length; i++) {
        int splitIndex = emails[i].indexOf("@");
        if(splitIndex <= 0) {
            continue;
        }
        String localName = emails[i].substring(0,splitIndex).trim();
        String domainName = emails[i].substring(splitIndex).trim();

        if(domainName.length() <= 1) {
            continue;
        }

        // 替换本地名中的.
        localName = localName.replace(".", "").trim();

        // 截取+之前的部分
        int plusIndex = localName.indexOf("+");
        if(plusIndex >= 0) {
            localName = localName.substring(0, plusIndex).trim();
        }

        if(localName.length() > 0) {
            emailsSet.add(localName + domainName);
        }
    }
    System.out.println(emailsSet.size());
}

修正后输出的集合大小为2,因为前两个邮箱处理后本地名都是testemail,域名都是@leetcode.com,会被HashSet去重,加上第三个的testemail@lee.tcode.com,最终集合大小是2。

内容的提问来源于stack exchange,提问作者Shreyasi Chakraborty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:27:03