I'm not referring to textInput, either. I mean that once you have static text in a TextView (populated from a Database call to user inputted data (that may not be Capitalized)), how can I make sure they are capitalized?
Thanks!
I'm not referring to textInput, either. I mean that once you have static text in a TextView (populated from a Database call to user inputted data (that may not be Capitalized)), how can I make sure they are capitalized?
Thanks!
For me none of working:
Function:
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();
}
Result:
I/P brain O/P Brain
I/P Brain and Health O/P Brain And Health
I/P brain And health to O/P Brain And Health
I/P brain's Health to O/P Brain's Health
I/P brain's Health and leg to O/P Brain's Health And Leg
Hope this would help you.
The accepted answer is good, but if you are using it to get values from a textView in android, it would be good to check if the string is empty. If the string is empty it would throw an exception.
private String capitizeString(String name){
String captilizedString="";
if(!name.trim().equals("")){
captilizedString = name.substring(0,1).toUpperCase() + name.substring(1);
}
return captilizedString;
}
For Kotlin, if you want to be sure that the format is "Aaaaaaaaa" you can use :
myString.toLowerCase(Locale.getDefault()).capitalize()
Here I have written a detailed article on the topic, as we have several options, Capitalize First Letter of String in Android
Method to Capitalize First Letter of String in Java
public static String capitalizeString(String str) {
String retStr = str;
try { // We can face index out of bound exception if the string is null
retStr = str.substring(0, 1).toUpperCase() + str.substring(1);
}catch (Exception e){}
return retStr;
}
Method to Capitalize First Letter of String in Kotlin
fun capitalizeString(str: String): String {
var retStr = str
try { // We can face index out of bound exception if the string is null
retStr = str.substring(0, 1).toUpperCase() + str.substring(1)
} catch (e: Exception) {
}
return retStr
}
Using XML Attribute
Or you can set this attribute in TextView or EditText in XML
android:inputType="textCapSentences"
For those using Jetpack Compose, you should use Compose's String.capitalize(locale: Locale), instead of Kotlin's, as follows:
import androidx.compose.ui.text.capitalize
import androidx.compose.ui.text.intl.Locale
Text("my text".capitalize(Locale.current)) // capitalizes first letter
Text("my text".toUpperCase(Locale.current)) // all caps
Note that Kotlin's .capitalize() is deprecated as of 1.5 as it isn't locale friendly. The suggestion is to use .replaceFirstChar()
Android Studio warns me
Implicitly using the default locale is a common source of bugs: Use capitalize(Locale) instead. For strings meant to be internal use Locale.ROOT, otherwise Locale.getDefault().
Thanks to the built in autofix, I made this extension function
fun String.titlecase(): String =
this.replaceFirstChar { // it: Char
if (it.isLowerCase())
it.titlecase(Locale.getDefault())
else
it.toString()
}
fun String.firstCap()=this.replaceFirstChar { it.uppercase() }
"lowercase letter".firstCap() //gives "Lowercase letter"
These lines of code helped me
String[] message_list=message.split(" ");
String full_message="";
for (int i=0; i<message_list.length; i++)
{
StringBuilder sb = new StringBuilder(message_list[i]);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
full_message=full_message+" "+sb;
}
textview_message.setText(full_message);
In Android XML this can be done with data-binding.
Once enabled in the build.gradle:
android {
buildFeatures {
dataBinding = true
}
}
One can use it to generate data-bindings from XML, which do permit simple code statements:
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="java.util.Locale"/>
</data>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/role"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text='@{ user.role != null ? user.role.substring(0, 1).toUpperCase(Locale.getDefault()) + user.role.substring(1) : "n/a" }'
android:gravity="center_vertical"
android:textSize="12sp"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</layout>
Obviously, one could as well import Kotlin or JetPack Compose classes ...
//Capitalize the first letter of the words
public String Capitalize(String str) {
String[] arr = str.split(" "); //convert String to StringArray
StringBuilder stringBuilder = new StringBuilder();
for (String w : arr) {
if (w.length() > 1) {
stringBuilder.append(w.substring(0, 1).toUpperCase(Locale.US) + w.substring(1).toLowerCase(Locale.US) + " ");
}
}
return stringBuilder.toString().trim();
}