Bagaimana cara menggunakan huruf besar untuk sebuah String di Java?

305

Saya menggunakan Java untuk mendapatkan Stringinput dari pengguna. Saya mencoba membuat huruf pertama dari input ini menjadi huruf besar.

Saya mencoba ini:

String name;

BufferedReader br = new InputStreamReader(System.in);

String s1 = name.charAt(0).toUppercase());

System.out.println(s1 + name.substring(1));

yang menyebabkan kesalahan kompilator ini:

  • Ketik ketidakcocokan: tidak bisa mengonversi dari InputStreamReader ke BufferedReader

  • Tidak dapat meminta toUppercase () pada char tipe primitif

sumithra
sumber
2
@Pontus - Saya tidak setuju. Untuk input "abcd", OP menginginkan output "Abcd". Tampaknya cukup jelas, meskipun pertanyaannya bisa lebih baik.
Kobi
karakter adalah tipe data primitif di Jawa. Anda tidak dapat melakukan dereferensi tipe data primitif dengan operator titik (.). Anda harus substring karakter pertama dengan name.substring (0,1);
Divakar Rajesh

Jawaban:

397
String str = "java";
String cap = str.substring(0, 1).toUpperCase() + str.substring(1);
// cap = "Java"

Dengan contoh Anda:

public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    // Actually use the Reader
    String name = br.readLine();
    // Don't mistake String object with a Character object
    String s1 = name.substring(0, 1).toUpperCase();
    String nameCapitalized = s1 + name.substring(1);
    System.out.println(nameCapitalized);
}
Rekin
sumber
1
Saya pikir Anda perlu -1 setelah str.length (), jika tidak, Anda akan keluar batas.
Dutt
@dutt: Tidak sebenarnya, itu juga baik-baik saja. Tetapi modifikasi Rekin membuatnya sempurna. ;)
Adeel Ansari
commons lang selalu lebih baik daripada menulis fungsi Anda sendiri kecuali dalam kasus yang jarang terjadi di mana Anda lebih tahu. Jika Anda tidak pergi membaca comm lang lang java doc pada fungsi kapitalisasi, Anda tidak boleh menulis sendiri.
The.Laughing.Man
211

StringUtils.capitalize(..) dari commons-lang

Bozho
sumber
Saya menggunakan WordUtils juga memiliki fungsi yang sama tetapi menggunakan huruf kapital dari semua kata dalam sebuah kalimat.
Surbhit Rao
StringUtils.capitalize( "fred from jupiter" );menghasilkan "Fred from jupiter". Mudah ...: D
udoline
WordUtils.capitalizeFully () bekerja untuk saya seperti pesona karena memberikan: WordUtils.capitalizeFully ("i am FINE") = "Saya Baik-Baik Saja"
Atul Sharma
91

Kode versi yang lebih pendek / lebih cepat untuk menggunakan huruf kapital huruf pertama dari String adalah:

String name  = "stackoverflow"; 
name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();

nilai nameis"Stackoverflow"

Jorgesys
sumber
4
Saya suka solusi ini karena memastikan sisa string huruf kecil. Itulah yang saya butuhkan ketika mengkonversi dari ALL_CAPS nama enum.
Ellen Spertus
54

Gunakan perpustakaan umum Apache. Bebaskan otak Anda dari barang-barang ini dan hindari Null Pointer & Index Out Of Bound Exception

Langkah 1:

Impor perpustakaan umum apache dengan meletakkan ini di build.gradledependensi

compile 'org.apache.commons:commons-lang3:3.6'

Langkah 2:

Jika Anda yakin string Anda menggunakan huruf kecil, atau yang Anda butuhkan adalah menginisialisasi huruf pertama, langsung hubungi

StringUtils.capitalize(yourString);

Jika Anda ingin memastikan bahwa hanya huruf pertama yang ditulis dengan huruf besar, seperti melakukan ini untuk enum, panggil toLowerCase()dulu dan ingatlah bahwa itu akan dilemparkan NullPointerExceptionjika string inputnya nol.

StringUtils.capitalize(YourEnum.STUFF.name().toLowerCase());
StringUtils.capitalize(yourString.toLowerCase());

Berikut adalah lebih banyak sampel yang disediakan oleh apache. itu pengecualian gratis

StringUtils.capitalize(null)  = null
StringUtils.capitalize("")    = ""
StringUtils.capitalize("cat") = "Cat"
StringUtils.capitalize("cAt") = "CAt"
StringUtils.capitalize("'cat'") = "'cat'"

catatan:

WordUtilsjuga termasuk dalam perpustakaan ini, tetapi sudah usang. Tolong jangan gunakan itu.

Fangming
sumber
2
Terima kasih. Saya tidak percaya orang-orang bahkan berpikir untuk menggunakan loop untuk tugas semacam ini
Alvaro
@ Alvaro, pada akhir hari - orang memang menggunakan loop untuk tugas ini, periksa kode sumber apache. Ini tidak berarti bahwa orang tidak boleh menggunakan solusi yang teruji dengan baik.
Yuriy Chernyshov
@ YuriyChernyshov yakin, saya maksudkan bahwa mereka seharusnya tidak menciptakan kembali roda untuk kode produksi untuk sebagian besar
Alvaro
WordUtils.capitalizeFully () bekerja untuk saya seperti pesona karena memberi: WordUtils.capitalizeFully ("i am FINE") = "Saya Baik-Baik Saja"
Atul Sharma
Saya tidak akan pernah pergi untuk perpustakaan eksternal hanya untuk tujuan kecil seperti How to capitalize the first letter of a String in Java?.
Stack Overflow
25

Jawa:

hanya metode pembantu untuk memanfaatkan setiap string.

public static String capitalize(String str)
{
    if(str == null) return str;
    return str.substring(0, 1).toUpperCase() + str.substring(1);
}

Setelah itu cukup panggil str = capitalize(str)


Kotlin:

str.capitalize()
Amir Hossein Ghasemi
sumber
Ini akan melempar pengecualian jika strnol. Periksa string tidak nol dan memiliki setidaknya satu karakter sebelum menggunakan ini.
attacomsian
@attacomsian Anda benar, saya memperbarui kode java dan untuk Kotlin Anda dapat menggunakan str? .capitalize ()
Amir Hossein Ghasemi
22

Apa yang ingin Anda lakukan mungkin ini:

s1 = name.substring(0, 1).toUpperCase() + name.substring(1);

(mengkonversi karakter pertama ke huruf besar dan menambahkan sisa dari string asli)

Juga, Anda membuat pembaca aliran input, tetapi tidak pernah membaca baris apa pun. Jadi nameakan selalu begitu null.

Ini seharusnya bekerja:

BufferedReader br = new InputstreamReader(System.in);
String name = br.readLine();
String s1 = name.substring(0, 1).toUpperCase() + name.substring(1);
Grodriguez
sumber
16

WordUtils.capitalize(java.lang.String)dari Apache Commons .

Zaki
sumber
Hai! Bisakah Anda jelaskan bagaimana menerapkan ini dalam proyek saya? Saya dapat melihat tautan unduhan file apa pun di URL Anda. Terima kasih
GrayFox
Metode ini sudah usang. Silakan gunakan StringUtils dari commons-lang
Fangming
12

Solusi di bawah ini akan berfungsi.

String A = "stackOverflow";
String ACaps = A.toUpperCase().charAt(0)+A.substring(1,A.length());
//Will print StackOverflow

Anda tidak dapat menggunakan toUpperCase () pada char primitive, tetapi Anda dapat membuat seluruh String menjadi Huruf besar terlebih dahulu kemudian mengambil char pertama, kemudian menambahkan substring seperti yang ditunjukkan di atas.

Jijil Kakkadathu
sumber
toUpperCase terbatas pada pertanyaan.
Harpreet Sandhu - TheRootCoder
Dalam pertanyaan, dia mencoba untuk UpCase pada primitif yang tidak akan berfungsi.
Jijil Kakkadathu
1
oh Saya merindukan hal itu. (y)
Harpreet Sandhu - TheRootCoder
1
jawaban yang bagus sayang
Dulaj Kulathunga
7

Terpendek juga:

String message = "my message";    
message = Character.toUpperCase(message.charAt(0)) + message.substring(1);
System.out.println(message)    // Will output: My message

Bekerja untukku.

Dassi Orleando
sumber
6

Atur string ke huruf kecil, lalu atur Huruf pertama ke atas seperti ini:

    userName = userName.toLowerCase();

lalu dengan huruf besar huruf pertama:

    userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase();

Substring hanya mendapatkan seutas tali yang lebih besar, lalu kita gabungkan kembali.

AlexZeCoder
sumber
7
Bagaimana saya mendapatkannya, baris pertama kode, tidak berguna, karena sisa string diatur ke huruf kecil.
Håvard Nygård
6

Bagaimana dengan WordUtils.capitalizeFully () ?

import org.apache.commons.lang3.text.WordUtils;

public class Main {

    public static void main(String[] args) {

        final String str1 = "HELLO WORLD";
        System.out.println(capitalizeFirstLetter(str1)); // output: Hello World

        final String str2 = "Hello WORLD";
        System.out.println(capitalizeFirstLetter(str2)); // output: Hello World

        final String str3 = "hello world";
        System.out.println(capitalizeFirstLetter(str3)); // output: Hello World

        final String str4 = "heLLo wORld";
        System.out.println(capitalizeFirstLetter(str4)); // output: Hello World
    }

    private static String capitalizeFirstLetter(String str) {
        return WordUtils.capitalizeFully(str);
    }
}
Arpit Aggarwal
sumber
6

Gunakan metode utilitas ini untuk mendapatkan semua huruf pertama di ibukota.

String captializeAllFirstLetter(String name) 
{
    char[] array = name.toCharArray();
    array[0] = Character.toUpperCase(array[0]);

    for (int i = 1; i < array.length; i++) {
        if (Character.isWhitespace(array[i - 1])) {
            array[i] = Character.toUpperCase(array[i]);
        }
    }

    return new String(array);
}
Krrish
sumber
5
String str1 = "hello";
str1.substring(0, 1).toUpperCase()+str1.substring(1);
Aditya Parmar
sumber
4

Anda juga dapat mencoba ini:

 String s1 = br.readLine();
 char[] chars = s1.toCharArray();
 chars[0] = Character.toUpperCase(chars[0]);
 s1= new String(chars);
 System.out.println(s1);

Ini lebih baik (dioptimalkan) daripada dengan menggunakan substring. (tapi jangan khawatir dengan string kecil)

jerjer
sumber
4

Anda dapat menggunakannya substring()untuk melakukan ini.

Tetapi ada dua kasus berbeda:

Kasus 1

Jika Stringhuruf kapital yang Anda gunakan dimaksudkan agar dapat dibaca oleh manusia, Anda juga harus menentukan lokal default:

String firstLetterCapitalized = 
    myString.substring(0, 1).toUpperCase(Locale.getDefault()) + myString.substring(1);

Kasus 2

Jika Stringkapitalisasi yang Anda maksud dapat dibaca oleh mesin, hindari menggunakan Locale.getDefault()karena string yang dikembalikan akan tidak konsisten di berbagai wilayah, dan dalam hal ini selalu tentukan lokal yang sama (misalnya,toUpperCase(Locale.ENGLISH) ). Ini akan memastikan bahwa string yang Anda gunakan untuk pemrosesan internal konsisten, yang akan membantu Anda menghindari bug yang sulit ditemukan.

Catatan: Anda tidak harus menentukan Locale.getDefault()untuk toLowerCase(), karena ini dilakukan secara otomatis.

JDJ
sumber
4

Di Android Studio

Tambahkan ketergantungan ini ke build.gradle (Module: app)

dependencies {
    ...
    compile 'org.apache.commons:commons-lang3:3.1'
    ...
}

Sekarang kamu bisa menggunakannya

String string = "STRING WITH ALL CAPPS AND SPACES";

string = string.toLowerCase(); // Make all lowercase if you have caps

someTextView.setText(WordUtils.capitalize(string));
Michael
sumber
4

jika Anda menggunakan SPRING :

import static org.springframework.util.StringUtils.capitalize;
...


    return capitalize(name);

CATATAN: Jika Anda sudah memiliki ketergantungan Apache Common Lang, maka pertimbangkan untuk menggunakan StringUtils.capitalize mereka sebagai jawaban lain menyarankan.

IMPLEMENTASI: https://github.com/spring-projects/spring-framework/blob/64440a5f04a17b3728234afaa89f57766768decb/spring-core/src/main/java/org/springframework/util/StringU5355355

REF: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/StringUtils.html#capitalize-java.lang.String-

epox
sumber
4

ITU AKAN BEKERJA 101%

public class UpperCase {

    public static void main(String [] args) {

        String name;

        System.out.print("INPUT: ");
        Scanner scan = new Scanner(System.in);
        name  = scan.next();

        String upperCase = name.substring(0, 1).toUpperCase() + name.substring(1);
        System.out.println("OUTPUT: " + upperCase); 

    }

}
u_mewara
sumber
3

Ini hanya untuk menunjukkan kepada Anda, bahwa Anda tidak salah.

BufferedReader br = new InputstreamReader(System.in);
// Assuming name is not blank
String name = br.readLine(); 

//No more error telling that you cant convert char to string
String s1 = (""+name.charAt(0)).toUppercase());
// Or, as Carlos prefers. See the comments to this post.
String s1 = Character.toString(name.charAt(0)).toUppercase());

System.out.println(s1+name.substring(1));

Catatan: Ini sama sekali bukan cara terbaik untuk melakukannya. Ini hanya untuk menunjukkan kepada OP bahwa itu dapat dilakukan dengan menggunakan charAt()juga. ;)

Adeel Ansari
sumber
1
+1 untuk "tidak salah". Saya lebih suka Character.toString(name.charAt(0)) daripada ""+name.charAt(0)menunjukkan apa yang benar-benar ingin saya lakukan.
user85421
Tidak ada pemeriksaan panjang nol .. Panjangnya bisa nol.
Chrispix
3

Ini akan bekerja

char[] array = value.toCharArray();

array[0] = Character.toUpperCase(array[0]);

String result = new String(array);
Mohamed Abdullah J
sumber
3

Anda dapat menggunakan kode berikut:

public static void main(String[] args) {

    capitalizeFirstLetter("java");
    capitalizeFirstLetter("java developer");
}

public static void capitalizeFirstLetter(String text) {

    StringBuilder str = new StringBuilder();

    String[] tokens = text.split("\\s");// Can be space,comma or hyphen

    for (String token : tokens) {
        str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).append(" ");
    }
    str.toString().trim(); // Trim trailing space

    System.out.println(str);

}
Mulalo Madida
sumber
3

coba yang ini

Apa yang dilakukan metode ini adalah, Pertimbangkan kata "hello world", metode ini mengubahnya menjadi "Hello World" dengan huruf kapital di awal setiap kata.

 private String capitalizer(String word){

        String[] words = word.split(" ");
        StringBuilder sb = new StringBuilder();
        if (words[0].length() > 0) {
            sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase());
            for (int i = 1; i < words.length; i++) {
                sb.append(" ");
                sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase());
            }
        }
        return  sb.toString();

    }
Ameen Maheen
sumber
Tapi kode ini sepertinya cukup dimengerti, Semua metode mudah dimengerti dengan nama mereka juga. Tapi terima kasih atas komentar Anda, akan mencoba membuat lebih sempurna dari waktu berikutnya, saya terlalu malas waktu :-).
Ameen Maheen
Bekerja seperti pesona!
TheVinceble
3

Jawaban yang diberikan adalah untuk huruf besar huruf pertama dari satu kata saja. gunakan kode berikut untuk menggunakan seluruh string.

public static void main(String[] args) {
    String str = "this is a random string";
    StringBuilder capitalizedString = new StringBuilder();
    String[] splited = str.trim().split("\\s+");

    for (String string : splited) {         
        String s1 = string.substring(0, 1).toUpperCase();
        String nameCapitalized = s1 + string.substring(1);

        capitalizedString.append(nameCapitalized);
        capitalizedString.append(" ");
    }
    System.out.println(capitalizedString.toString().trim());
}

keluaran: This Is A Random String

Vimukthi_R
sumber
3

Jika Masukan adalah Huruf Besar, maka Gunakan berikut ini:

str.substring (0, 1) .toUpperCase () + str.substring (1) .toLowerCase ();

Jika Inputnya lebih rendah, maka gunakan yang berikut:

str.substring (0, 1) .toUpperCase () + str.substring (1);

Raj Kumar
sumber
2
public static String capitalizer(final String texto) {

    // split words
    String[] palavras = texto.split(" ");
    StringBuilder sb = new StringBuilder();

    // list of word exceptions
    List<String> excessoes = new ArrayList<String>(Arrays.asList("de", "da", "das", "do", "dos", "na", "nas", "no", "nos", "a", "e", "o", "em", "com"));

    for (String palavra : palavras) {

        if (excessoes.contains(palavra.toLowerCase()))
            sb.append(palavra.toLowerCase()).append(" ");
        else
            sb.append(Character.toUpperCase(palavra.charAt(0))).append(palavra.substring(1).toLowerCase()).append(" ");
    }
    return sb.toString().trim();
}
Doc Brown
sumber
2

Anda dapat menggunakan kode berikut:

public static String capitalizeString(String string) {

    if (string == null || string.trim().isEmpty()) {
        return string;
    }
    char c[] = string.trim().toLowerCase().toCharArray();
    c[0] = Character.toUpperCase(c[0]);

    return new String(c);

}

contoh tes dengan JUnit:

@Test
public void capitalizeStringUpperCaseTest() {

    String string = "HELLO WORLD  ";

    string = capitalizeString(string);

    assertThat(string, is("Hello world"));
}

@Test
public void capitalizeStringLowerCaseTest() {

    String string = "hello world  ";

    string = capitalizeString(string);

    assertThat(string, is("Hello world"));
}
David Navarro Astudillo
sumber
2

Menggunakan commons.lang.StringUtilsjawaban terbaik adalah:

public static String capitalize(String str) {  
    int strLen;  
    return str != null && (strLen = str.length()) != 0 ? (new StringBuffer(strLen)).append(Character.toTitleCase(str.charAt(0))).append(str.substring(1)).toString() : str;  
}

Saya merasa brilian karena membungkus string dengan StringBuffer. Anda dapat memanipulasi StringBuffer seperti yang Anda inginkan dan meskipun menggunakan instance yang sama.

kecepatan
sumber
2

Contoh lain, bagaimana Anda bisa membuat huruf pertama dari input pengguna menjadi kapital:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String string = br.readLine();
// handle supplementary characters
IntStream.concat(
        IntStream.of(string.codePointAt(0))
                .map(Character::toUpperCase), string.codePoints().skip(1)
)
.forEach(cp -> System.out.print(Character.toChars(cp)));

sumber