Java 在句子中用符号大写每个单词的第一个字母

Java 在句子中用符号大写每个单词的第一个字母,java,string,uppercase,Java,String,Uppercase,我有一个存储人们编写的字符串的数据库。例如,这些字符串定义了电影的名称 为了克服重复和其他一些问题,我做了这样一件事:无论用户键入什么,它都会使每个首字母大写。这样,所有字符串都将以相同的方式保存 我这样做的方式是使用: String[] words = query.split( "\\s+" ); for (int i = 0; i < words.length; i++) { String Word = words[i].replaceAll( "

我有一个存储人们编写的字符串的数据库。例如,这些字符串定义了电影的名称

为了克服重复和其他一些问题,我做了这样一件事:无论用户键入什么,它都会使每个首字母大写。这样,所有字符串都将以相同的方式保存

我这样做的方式是使用:

String[] words = query.split( "\\s+" );
for (int i = 0; i < words.length; i++) {
    String Word = words[i].replaceAll( "[^\\w]", "" );
    words[i] = Word.substring( 0, 1 ).toUpperCase() + Word.substring( 1 );
}
query = TextUtils.join( " ", words );
String[]words=query.split(\\s+);
for(int i=0;i
然而,当我尝试键入类似于:Tom&Jerry的内容时,我遇到了一个问题


在这种情况下,我的
出现了一个错误。我是否只需要设置if条件来检查每个字母,例如
&、(,)、$
等等?

toUpperCase
处理非字母字符很好,只返回相同的字符。代码的问题在于,它假定每个
单词都是非空的,而在删除特殊字符后,这一点就不再成立了

长话短说,只需保留特殊角色,你就可以了:

for (int i = 0; i < words.length; i++) {
    String word = words[i];
    words[i] = word.substring( 0, 1 ).toUpperCase() + word.substring( 1 );
}
for(int i=0;i
为什么要执行diid
replaceAll([^\\w],”)
?这就是问题的原因。问题是
&
变为空字符串,然后当您尝试使用子字符串时,该字符串为空。检查长度>1应该可以修复它。我会寻找一个解决方案,用大写值替换字符串中的第一个
[a-z]
。这可以用正则表达式来完成
“^([^a-z]*)([a-z])(.*)”
如果匹配,则使用这三个组在第二个组上使用toupper重新构造一个新字符串。