java - 用句子中的符号将每个单词的第一个字母大写
问题描述
我有一个存储人们编写的字符串的数据库。例如,这些字符串定义了电影的名称。
为了克服重复和其他一些事情,无论用户输入什么,我都会这样做,它将每个首字母大写。这样,所有的字符串都将以相同的方式保存。
我这样做的方法是使用:
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 );
但是,当我尝试输入类似 Tom & Jerry 的内容时遇到了问题。
在这种情况下,我收到了一个错误&
。我是否只需要设置 if 条件来检查每个字母,例如&, (, ), $
等等?
解决方案
toUpperCase
处理非字母字符就好了,只返回相同的字符。您的代码的问题在于它假设每个word
都是非空的,在您删除特殊字符后不再是这样。
长话短说,只要保留特殊字符,就可以了:
for (int i = 0; i < words.length; i++) {
String word = words[i];
words[i] = word.substring( 0, 1 ).toUpperCase() + word.substring( 1 );
}
推荐阅读
- python - Django 添加新模型,异常类型:OperationalError 异常值:没有这样的表:
- python - 如何使用 groupby 减去列中的值
- java - Spring boot rest api - 将 getResultList() 转换为 Map 以显示响应而不创建 java 类的最佳方法?
- c - 如何在C中正确关闭文件
- excel - 如何将图表中一个条形的颜色设置为透明?
- php - 组织数据库来存储/获取用户事件和日期
- java - 如何将调用注释的类名和方法作为“值”传递给注释属性
- mysql - Express mysql connection err Error: connect ETIMEDOUT on Mac OS
- typescript - 打字稿简单的减速器组成
- javascript - 只允许数字和逗号