python有很多处理str格式的方法,可以方便利用
capitalize():将首字母大写,其他字母变小写
def stringCase():
info0='youngCase'
str.capitalize(info0)
print("首字母大写"+info0.capitalize())
官方python测试代码为
def test_capitalize(self):
self.checkequal(' hello ', ' hello ', 'capitalize')
self.checkequal('Hello ', 'Hello ','capitalize')
self.checkequal('Hello ', 'hello ','capitalize')
self.checkequal('Aaaa', 'aaaa', 'capitalize')
self.checkequal('Aaaa', 'AaAa', 'capitalize')
深挖源码:尝试用vscode直接进入capitalize()函数,目录为:
结果为:
@overload
def capitalize(self: LiteralString) -> LiteralString: ...
@overload
def capitalize(self) -> str: ... # type: ignore[misc]
并没有看到具体的实现方法:
Python的内置函数(用于cpython)是用C编写的,因此vscode提供了只显示函数签名的伪方法。因此需要查找包含源代码的GitHub页面:
So,先在cpython中找到buitins.pyi对应的源文件,其他教程提示是在:
https://github.com/python/cpython/blob/main/Python/bltinmodule.c(其实不是)
我是在https://github.com/python/cpython/blob/main/Objects/bytearrayobject.c
找到了方法声明:
点击stringlib_capitalize跳转到(到头文件了):
cpython/ctype.h at main · python/cpython · GitHub
tatic PyObject*
stringlib_capitalize(PyObject *self, PyObject *Py_UNUSED(ignored))
{
PyObject* newobj;
newobj = STRINGLIB_NEW(NULL, STRINGLIB_LEN(self));
if (!newobj)
return NULL;
_Py_bytes_capitalize(STRINGLIB_STR(newobj), STRINGLIB_STR(self),
STRINGLIB_LEN(self));
return newobj;
}
再点击_Py_bytes_capitalize跳转到:
cpython/bytes_methods.c at main · python/cpython · GitHub
得到如下代码
其实如注释所示:就是将首字母大写,后续字符置为小写.再后再返回
我也查找了java 的capitalize()实现,在import com.sun.xml.internal.ws.util.StringUtils后可以看到java的实现方式比较简单,只是将首字母进行大写,后续字符没有变小写。
public static String capitalize(String name) {
if (name != null && name.length() != 0) {
char[] chars = name.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
return new String(chars);
} else {
return name;
}
}
}
【注:文章内容可能不正确,欢迎指正】