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

Android开发:将字符串转换为URL标题格式的实现方法

实现Android版的URL Slug生成函数

我懂你要的是什么——就是那种干净、适合放在URL里的标题字符串,把空格换成-,干掉各种乱七八糟的特殊字符,跟你在CodeIgniter里用的自定义函数一个效果对吧?URLEncoder确实满足不了,它那套编码是给参数用的,不是做slug的。

直接给你撸个实用的Java方法,你可以直接放到工具类里用:

public static String generateUrlSlug(String header) {
    if (header == null || header.trim().isEmpty()) {
        return "";
    }

    // 1. 统一转成小写(可选,如果你需要大小写混合可以去掉这步)
    String slug = header.toLowerCase().trim();

    // 2. 处理带重音的特殊字符(比如西班牙语的é、ñ,转成普通ASCII字符)
    slug = Normalizer.normalize(slug, Normalizer.Form.NFD);
    slug = slug.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");

    // 3. 把所有空白字符(空格、制表符等)替换成单个连字符
    slug = slug.replaceAll("\\s+", "-");

    // 4. 移除所有非字母、数字和连字符的字符
    slug = slug.replaceAll("[^a-z0-9-]", "");

    // 5. 把连续多个连字符换成单个
    slug = slug.replaceAll("-+", "-");

    // 6. 去掉首尾的连字符
    return slug.replaceAll("^-|-$", "");
}

代码细节说明:

  • 转小写:是为了让URL更统一,避免出现Hello-World和hello-world这种重复但大小写不同的情况,不需要的话直接删掉就行。
  • 处理重音字符:用Normalizer把带重音的字符(比如García里的í)转成普通字符加重音标记,再把重音标记删掉,这样就能得到garcia,完美适配多语言场景。
  • 替换空白:用\\s+匹配所有空白(包括多个连续空格),一次性换成单个-,避免出现hello--world这种冗余格式。
  • 清理特殊字符:只保留字母、数字和-,其他乱七八糟的符号(比如!@#$%)全部过滤掉。
  • 合并连续连字符:防止前面的步骤出现多个-连在一起的情况,统一换成单个更规范。
  • 修剪首尾:确保slug不会以-开头或结尾,符合URL的常规格式。

实际效果示例:

如果你的Ad header是"¡Hola Mundo! This is an Ad's Header 2024!!",经过这个函数处理后会得到:hola-mundo-this-is-an-ads-header-2024

完全贴合你要的需求,逻辑和你CodeIgniter里的自定义函数对齐,直接拿去用就好!

内容的提问来源于stack exchange,提问作者Erich García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:35:16