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

Go语言中如何按指定区间循环字符串以解析邮箱域名与TLD

实现Go中特定字符串位置间的循环操作

要拆分邮箱的域名和顶级域名,核心是先找到两个关键位置(@和其后的.),然后在这两个位置之间做循环提取,或者直接用字符串切片(更高效)。

步骤说明

  1. 定位关键索引:先用strings.Index找到@的位置,再从@之后的部分找到.的位置。
  2. 区间循环提取:设置循环的起始和结束索引,只遍历目标区间内的字符。
  3. 推荐方案:字符串切片:Go的字符串支持直接按索引切片,比循环拼接更高效,适合ASCII字符场景。

修改后的代码示例

import (
    "fmt"
    "strings"
)

func main() {
    email := "learning@gmail.com"
    
    // 找到@的位置,没有则判定为无效邮箱
    atIdx := strings.Index(email, "@")
    if atIdx == -1 {
        fmt.Println("无效的邮箱地址")
        return
    }
    
    // 截取@之后的部分,再找里面的.的位置
    domainSection := email[atIdx+1:]
    dotIdx := strings.Index(domainSection, ".")
    if dotIdx == -1 {
        fmt.Println("域名格式无效")
        return
    }
    
    // 方法1:用循环提取特定区间的字符
    domain := ""
    // 从@的下一位开始,到.的位置结束
    for i := atIdx + 1; i < atIdx+1+dotIdx; i++ {
        domain += string(email[i])
    }
    
    tld := ""
    // 从.的下一位开始,到字符串末尾结束
    for i := atIdx+1+dotIdx+1; i < len(email); i++ {
        tld += string(email[i])
    }
    
    fmt.Printf("Domain: `%s` and TLD: `%s`\n", domain, tld)
    
    // 方法2:字符串切片(更高效,推荐使用)
    domainSlice := domainSection[:dotIdx]
    tldSlice := domainSection[dotIdx+1:]
    fmt.Printf("Domain: `%s` and TLD: `%s`\n", domainSlice, tldSlice)
}

关键细节

  • 循环的起始索引设为atIdx+1(跳过@),结束索引设为atIdx+1+dotIdx(刚好到.的位置前),这样循环只会处理域名部分的字符。
  • 字符串切片直接通过[start:end]截取区间,无需循环,性能更好,尤其处理长字符串时优势明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:10:57