如何在Android应用程序的TextView中将文本的第一个字母大写

119

我不是指textInput。我的意思是,一旦您在一个TextView中有静态文本(从数据库调用用户输入的数据填充而来(可能未大写)),如何确保它们被大写?

谢谢!


4
对于未来的访问者... 在 Kotlin 中只需使用 "abcd".capitalize()。 - Amit Tumkur
capitalize已被弃用,我已经在答案中添加了原因和解决方法 - https://dev59.com/43A75IYBdhLWcg3wMmGo#67482851 - Jay Wick
22个回答

220

我应该能够通过标准的Java字符串操作来实现这一点,而不需要使用Android或TextView特定的方法。

例如:

String upperString = myString.substring(0, 1).toUpperCase() + myString.substring(1).toLowerCase();

虽然可能有无数种方法来完成这个任务,但请参阅String文档。

编辑 我添加了.toLowerCase()


16
请注意,这是一个适用于英语的好解决方案,但不太适合本地化。 - Billy Lazzaro

84

以下内容不适用于TextView,但适用于EditText;即使是在EditText中,它也仅适用于从键盘输入的文本,而不适用于使用setText()加载的文本。更具体地说,它打开了键盘上的大写锁定,并且用户可以根据自己的意愿覆盖这一设置。

android:inputType="textCapSentences"
或者
TV.sname.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

这将使首字母大写。

或者

compile 'org.apache.commons:commons-lang3:3.4' //in build.gradle module(app)

tv.setText(StringUtils.capitalize(myString.toLowerCase().trim()));

83
这不适用于 TextView,只适用于 EditText;即使是 EditText,也只适用于从键盘输入的文本,而不是使用 setText() 加载的文本。更具体地说,它打开键盘上的大写锁定功能,用户可以根据自己的意愿覆盖这个功能。 - Alex Cohn

37

对于 Kotlin,只需调用

textview.text = string.capitalize()

3
我本以为它会将每个单词都大写,但事实上它只能用于第一个单词。 - Skoua
1
如果您在多语言应用程序中使用此功能,传递区域设置会使其更好。 - Dharmendra Pratap Singh
1
自1.5版本起,Capitalize已被弃用,在此处添加了我的替代答案 https://dev59.com/43A75IYBdhLWcg3wMmGo#67482851 - Jay Wick

34
StringBuilder sb = new StringBuilder(name);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));  
return sb.toString();

10
您可以像这样在Gradle中添加 Apache Commons Langcompile 'org.apache.commons:commons-lang3:3.4' 然后使用 WordUtils.capitalizeFully(name)

1
信息:lang3 WordUtils已被弃用,您应该使用“org.apache.commons.text.WordUtils”代替:https://commons.apache.org/proper/commons-text/javadocs/api-release/org/apache/commons/text/WordUtils.html#capitalizeFully(java.lang.String) - gabhor

4
对我来说,这些都不起作用:
功能:
private String getCapsSentences(String tagName) {
    String[] splits = tagName.toLowerCase().split(" ");
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < splits.length; i++) {
        String eachWord = splits[i];
        if (i > 0 && eachWord.length() > 0) {
            sb.append(" ");
        }
        String cap = eachWord.substring(0, 1).toUpperCase() 
                + eachWord.substring(1);
        sb.append(cap);
    }
    return sb.toString();
}

结果:

I/P brain O/P 大脑

I/P Brain and Health O/P 大脑和健康

I/P brain And health to O/P 大脑和健康

I/P brain's Health to O/P 大脑的健康

I/P brain's Health and leg to O/P 大脑的健康和腿部

希望这可以帮到您。


4

4

对于Kotlin,如果您想确保格式为“Aaaaaaaaa”,您可以使用:

myString.toLowerCase(Locale.getDefault()).capitalize()

4

接受的答案很好,但如果你正在使用它从Android中的textView获取值,最好检查字符串是否为空。 如果字符串为空,它将抛出异常。

private String capitizeString(String name){
    String captilizedString="";
    if(!name.trim().equals("")){
       captilizedString = name.substring(0,1).toUpperCase() + name.substring(1);
    }
    return captilizedString;
}

3

添加 Kotlin 扩展

fun String.firstCap()=this.replaceFirstChar { it.uppercase() }

用例

"lowercase letter".firstCap() //gives "Lowercase letter"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接