我想把a的第一个字母大写&str.这是一个简单的问题,我希望有一个简单的解决方案.直觉告诉我做这样的事情:
let mut s = "foobar";
s[0] = s[0].to_uppercase();
Run Code Online (Sandbox Code Playgroud)
但是&strs不能像这样编入索引.我能够做到这一点的唯一方法似乎过于复杂.我将转换&str为迭代器,将迭代器转换为向量,大写为向量中的第一项,它创建了一个迭代器,我将其编入索引,创建一个Option,我打开它给我一个上面的首字母.然后我将矢量转换为迭代器,我将其转换为a String,我将其转换为a &str.
let s1 = "foobar";
let mut v: Vec<char> = s1.chars().collect();
v[0] = v[0].to_uppercase().nth(0).unwrap();
let s2: String = v.into_iter().collect();
let s3 = &s2;
Run Code Online (Sandbox Code Playgroud)
有没有比这更简单的方法,如果有,那又怎样?如果没有,为什么Rust以这种方式设计?
我一直在浏览所有StackOverflow中有关Java资本化问题的大量问题,而且他们似乎都不关心国际化,事实上似乎没有一个在国际背景下工作.所以这是我的问题.
我在Java中有一个String,它代表一个单词 - 所有isLetter()字符,没有空格.我想让第一个字符大写,其余小写.我确实有我的单词的语言环境.
为字符串的最后一部分调用.substring(1).toLowerCase(Locale)很容易.但我不知道如何获得正确的第一个角色.
我遇到的第一个问题是荷兰语,其中"ij"作为有向图应该一起大写.我可以手工处理这个问题,因为我了解它; 现在可能还有其他语言有这种我不知道的东西,我相信Unicode会告诉我,如果我问得好.但我不知道该怎么问.
即使上面的问题得到解决,我仍然没有办法处理英语,土耳其语和希腊语,因为Character支持titlecase但没有语言环境,而String支持语言环境但不支持标题.
如果我接受代码点,并将其传递给Character.toTitleCase(),则会失败,因为无法将语言环境传递给此方法.因此,如果系统区域设置是英语但是单词是土耳其语,并且单词的第一个字符是"i",我将得到"I"而不是"İ",这是错误的.现在,如果我使用子字符串并使用.toUpperCase(Locale),这将失败,因为它是高位而不是标题大小写.因此,如果这个词是希腊语,我仍然会得到错误的字符.
如果有人有有用的指示,我会很高兴听到他们.
这听起来像个笑话,但我可以证明这一点.
假设:
s且仅当它匹配时才匹配s.toUpperCase().以下所有内容都非常符合逻辑并且在Java中保留:
"?".matches(".") LATIN SMALL LIGATURE FFI(U + FB03)是一个字符,因此它必须匹配"ß".matches(".") LATIN SMALL LETTER SHARP S(U + 00DF)是一个字符,因此它必须匹配"?".toUpperCase().equals("FFI") 按Unicode标准(没有资本连字FFI)"ß".toUpperCase().equals("SS") 按照Unicode标准(有一个大写的S,但它没有被使用)"FfI".toUpperCase().equals("FFI") 明显"sS".toUpperCase.equals("SS") 明显因此,假设正则表达式中的第一个点代表?第二个点,则正则ß表达式必须匹配"FFISS",并且因为不区分大小写也是"FfIsS".
我真的希望有一些错误,否则正则表达式会变得非常不可用.
问题:
Javascript的String原型方法toUpperCase()是否会在每个支持UTF-8的语言/字符集中提供自然预期的结果?
我已经尝试过简体中文,韩文,泰米尔语,日语和西里尔语,到目前为止结果似乎合理.我可以依赖语言安全的方法吗?
例:
"???????????????????????????????????????????????".toUpperCase()
> "???????????????????????????????????????????????"
Run Code Online (Sandbox Code Playgroud)
编辑:正如@Quentin指出的,还有一个String.prototype.toLocaleUpperCase()甚至可能"更安全"使用,但我还必须支持IE 8及更高版本,以及基于Webkit的浏览器.由于它是ECMAScript 3 Standard的一部分,它应该可以在所有这些浏览器上使用,对吧?
有谁知道使用它会产生自然意外结果的任何情况?