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

如何实现Jaden Case字符串转换?解决撇号后字母误大写问题

嘿,我来帮你搞定这个Jaden Case的问题!首先得说说你代码里的几个小问题:

  • 你的循环逻辑根本没机会发挥作用:只要遇到不是撇号的字符,就直接return string.title()了——比如输入的第一个字符是"H",函数马上就返回title()的结果,后面的循环代码连执行的机会都没有。
  • 还有个语法错误:letter是单个字符,你不能用letter[+1]去获取下一个字符,而且Python里也没有lowercase()方法,正确的写法是lower()。另外,字符串在Python里是不可变的,你直接修改letter也不会影响原字符串哦。

解决方法1:手动处理每个单词(直观好懂)

我们可以把字符串按空格拆成单词,逐个处理每个单词的首字母,这样就能精准控制哪些字母需要大写:

def toJadenCase(string):
    words = string.split()
    jaden_words = []
    for word in words:
        if not word:
            jaden_words.append(word)
            continue
        # 首字母大写,后面的字符统一转小写(撇号后的字母自然就是小写了)
        jaden_word = word[0].upper() + word[1:].lower()
        jaden_words.append(jaden_word)
    return ' '.join(jaden_words)

拿你的例子测试:
输入:"Hi, I'm twenty years old"
输出:"Hi, I'm Twenty Years Old"
(如果是想去掉逗号这类标点,可以在处理前加个过滤逻辑,但核心需求——撇号后字母不大写——已经完美解决啦)

解决方法2:正则表达式(简洁高效)

如果你偏爱简洁的写法,用正则匹配每个单词的开头(字符串开头或空格后的第一个字母),然后替换成大写就行:

import re

def toJadenCase(string):
    # 只匹配字符串开头或空格后的首字母,转成大写
    return re.sub(r"(^|\s)(\w)", lambda match: match.group(1) + match.group(2).upper(), string)

这个正则的逻辑很简单:(^|\s)匹配字符串开头或者空格,(\w)匹配后面的第一个字母,然后用lambda函数把这个字母转大写,再和前面的空格/开头拼接起来。这样就不会碰撇号后面的字母啦。

哦对了,顺便说下为什么你用title()会出问题:Python的str.title()会把任何非字母数字字符后的第一个字母都转成大写,所以"I'm".title()会变成"I'M"——这就是你遇到的坑啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:57:44