Bagaimana cara menggunakan huruf besar pada kata pertama dalam suatu string menggunakan Java?


223

Contoh string

one thousand only
two hundred
twenty
seven

Bagaimana cara mengubah karakter pertama dari string dalam huruf kapital dan tidak mengubah huruf apa pun dari huruf lainnya?

Setelah perubahan itu seharusnya:

One thousand only
Two hundred
Twenty
Seven

Catatan: Saya tidak ingin menggunakan apache.commons.lang.WordUtils untuk melakukan ini.


1
@eat_a_lemon: jauh lebih baik menggunakan Character.toUpperCase (), karena menangani kasus selain az (mis. angka, tanda baca, huruf dengan diakritik, karakter non-Latin).
Simon Nickerson

Jawaban:


544

Jika Anda hanya ingin menggunakan huruf besar dari string yang bernama inputdan biarkan sisanya:

String output = input.substring(0, 1).toUpperCase() + input.substring(1);

Sekarang outputakan memiliki apa yang Anda inginkan. Periksa apakah Anda inputsetidaknya satu karakter lama sebelum menggunakan ini, jika tidak, Anda akan mendapatkan pengecualian.


37
Juga, saya pertama-tama akan mengambil seluruh input dan menjadikannya huruf kecil atau ulang contoh Anda sebagai berikut: String output = input.substring (0, 1) .toUpperCase () + input.substring (1) .toLowerCase ();
David Brossard

2
Dan Anda ingin memeriksa panjang talinya, karena bisa 1 senar, atau bahkan 0.
Marek

1
Saya menemukan ini di sini untuk pembuatan nama pengambil dan penyetel, oleh karena itu untuk LowerCase pada sisa String akan merusak penamaan bidang. Jawaban yang diberikan sangat cocok untuk saya.
kaiser

85
public String capitalizeFirstLetter(String original) {
    if (original == null || original.length() == 0) {
        return original;
    }
    return original.substring(0, 1).toUpperCase() + original.substring(1);
}

Hanya ... solusi lengkap, saya melihat itu seperti akhirnya menggabungkan apa yang orang lain posting akhirnya = P.


12
Bagus. Saya "satu-lapis" itu: return original.length() == 0 ? original : original.substring(0, 1).toUpperCase() + original.substring(1);
mharper

2
@ Mharper:, if length() == 0tidak bisakah kita mengatakannya dengan aman ""dan mengembalikannya original? Menghemat beberapa karakter dalam satu garis. Saya bertanya karena saya merasa Jawa adalah bahasa yang begitu penuh dengan gotcha, saya jujur ​​tidak akan terkejut jika ada cara lain untuk memiliki string dengan panjang nol.
ArtOfWarfare

Anda berbicara semua kebenaran @ArtOfWarfare.
mharper

Catatan: Anda mungkin juga ingin membuatnya berfungsi dengan huruf non-Inggris. Dalam hal ini Anda harus menentukan lokal di metode toUpperCase ().
Makalele

Ini tidak mungkin digunakan String.toUpperCase(Locale)untuk string arbitrer, karena Lokal harus cocok dengan teks. Ya, itu harus digunakan, tetapi tidak selalu jelas mana yang Localeharus digunakan ...
Christopher Schultz

81

Cara termudah adalah menggunakan org.apache.commons.lang.StringUtilskelas

StringUtils.capitalize(Str);


8
Catatan kecil di sini. Ini hanya berfungsi untuk string yang belum dikapitalisasi.
jobbert

5
@jobbert Tolong jelaskan komentar Anda. Jika string sudah dikapitalisasi, akankah itu tidak dikapitalisasi meskipun disebut metode capitalize?
Cœur

25

Juga, Ada org.springframework.util.StringUtilsdi Spring Framework :

StringUtils.capitalize(str);


6
String sentence = "ToDAY   WeAthEr   GREat";    
public static String upperCaseWords(String sentence) {
        String words[] = sentence.replaceAll("\\s+", " ").trim().split(" ");
        String newSentence = "";
        for (String word : words) {
            for (int i = 0; i < word.length(); i++)
                newSentence = newSentence + ((i == 0) ? word.substring(i, i + 1).toUpperCase(): 
                    (i != word.length() - 1) ? word.substring(i, i + 1).toLowerCase() : word.substring(i, i + 1).toLowerCase().toLowerCase() + " ");
        }

        return newSentence;
    }
//Today Weather Great

Ini tidak menjawab pertanyaan OP. Karena itu mengubah kasus dari surat-surat lainnya.
Lieuwe Rooijakkers

Lihatlah pertanyaannya. Mungkin, Anda tidak mendapatkan pertanyaan dengan baik.
Samet ÖZTOPRAK

3
String s=t.getText().trim();
int l=s.length();
char c=Character.toUpperCase(s.charAt(0));
s=c+s.substring(1);
for(int i=1; i<l; i++)
    {
        if(s.charAt(i)==' ')
        {
            c=Character.toUpperCase(s.charAt(i+1));
            s=s.substring(0, i) + c + s.substring(i+2);
        }
    }
    t.setText(s);

2
Ini akan huruf besar huruf pertama dari setiap kata, bukan dari string secara keseluruhan. Lihat contoh yang diberikan oleh OP. Juga bisa ada masalah jika ada ruang di ujung tali.
tobias_k

2

Ini dia (harap ini memberi Anda ide):

/*************************************************************************
 *  Compilation:  javac Capitalize.java
 *  Execution:    java Capitalize < input.txt
 * 
 *  Read in a sequence of words from standard input and capitalize each
 *  one (make first letter uppercase; make rest lowercase).
 *
 *  % java Capitalize
 *  now is the time for all good 
 *  Now Is The Time For All Good 
 *  to be or not to be that is the question
 *  To Be Or Not To Be That Is The Question 
 *
 *  Remark: replace sequence of whitespace with a single space.
 *
 *************************************************************************/

public class Capitalize {

    public static String capitalize(String s) {
        if (s.length() == 0) return s;
        return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
    }

    public static void main(String[] args) {
        while (!StdIn.isEmpty()) {
            String line = StdIn.readLine();
            String[] words = line.split("\\s");
            for (String s : words) {
                StdOut.print(capitalize(s) + " ");
            }
            StdOut.println();
        }
    }

}

dan tidak mengubah kasus huruf-huruf lainnya. Juga penggunaan Anda StdIndan StdOuttidak terlalu Java-y. :-)
Simon Nickerson

2

Hanya diperlukan satu kode baris sederhana untuk ini. jika String A = scanner.nextLine(); kemudian Anda perlu menulis ini untuk menampilkan string dengan huruf pertama ini menjadi huruf besar.

System.out.println(A.substring(0, 1).toUpperCase() + A.substring(1));

Dan itu dilakukan sekarang.


1

Contoh menggunakan kelas StringTokenizer:

String st = "  hello all students";
String st1;
char f;
String fs="";
StringTokenizer a= new StringTokenizer(st);
while(a.hasMoreTokens()){   
        st1=a.nextToken();
        f=Character.toUpperCase(st1.charAt(0));
        fs+=f+ st1.substring(1);
        System.out.println(fs);
} 

1

Solusi dengan StringBuilder:

value = new StringBuilder()
                .append(value.substring(0, 1).toUpperCase())
                .append(value.substring(1))
                .toString();

.. berdasarkan jawaban sebelumnya


1

Menambahkan semuanya bersama-sama, merupakan ide bagus untuk memotong ruang putih ekstra di awal string. Jika tidak, .substring (0,1) .toUpperCase akan mencoba memanfaatkan ruang putih.

    public String capitalizeFirstLetter(String original) {
        if (original == null || original.length() == 0) {
            return original;
        }
        return original.trim().substring(0, 1).toUpperCase() + original.substring(1);
    }

1

Pendekatan fungsional saya. karakter capstilise pertama dalam kalimat setelah whitescape di seluruh paragraf.

Untuk mengaitkan satu-satunya karakter pertama dari kata itu cukup hapus .split ("")

           b.name.split(" ")
                 .filter { !it.isEmpty() }
                 .map { it.substring(0, 1).toUpperCase() 
                 +it.substring(1).toLowerCase() }
                  .joinToString(" ")

1

Perbarui Juli 2019

Saat ini, fungsi perpustakaan yang paling mutakhir untuk melakukan hal ini terdapat di org.apache.commons.lang3.StringUtils

import org.apache.commons.lang3.StringUtils;

StringUtils.capitalize(myString);

Jika Anda menggunakan Maven, impor ketergantungan di pom.xml Anda:

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.9</version>
</dependency>

1

Bahkan untuk kode "sederhana", saya akan menggunakan perpustakaan. Masalahnya bukan kode itu sendiri, tetapi kasus uji yang sudah ada meliputi kasus luar biasa. Ini bisa berupa null, string kosong, string dalam bahasa lain.

Bagian manipulasi kata telah dipindahkan dari Apache Commons Lang. Sekarang ditempatkan di Teks Apache Commons . Dapatkan melalui https://search.maven.org/artifact/org.apache.commons/commons-text .

Anda dapat menggunakan WordUtils.capitalize (String str) dari Apache Commons Text. Itu lebih kuat dari yang Anda minta. Itu juga dapat menggunakan huruf besar (misalnya, memperbaiki "oNe tousand only").

Karena ini berfungsi pada teks lengkap, kita harus mengatakannya untuk menggunakan huruf kapital hanya kata pertama.

WordUtils.capitalize("one thousand only", new char[0]);

Kelas JUnit penuh untuk memungkinkan bermain dengan fungsi:

package io.github.koppor;

import org.apache.commons.text.WordUtils;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class AppTest {

  @Test
  void test() {
    assertEquals("One thousand only", WordUtils.capitalize("one thousand only", new char[0]));
  }

}

1

jika Anda hanya ingin menggunakan huruf besar untuk huruf pertama maka kode di bawah ini dapat digunakan

String output = input.substring(0, 1).toUpperCase() + input.substring(1);

1

Sebenarnya, Anda akan mendapatkan kinerja terbaik jika Anda menghindari +operator dan menggunakannya concat()dalam kasus ini. Ini adalah pilihan terbaik untuk menggabungkan hanya 2 string (tidak begitu bagus untuk banyak string). Dalam hal ini kode akan terlihat seperti ini:

String output = input.substring(0, 1).toUpperCase().concat(input.substring(1));

0

Gunakan ini:

char[] chars = {Character.toUpperCase(A.charAt(0)), 
Character.toUpperCase(B.charAt(0))};
String a1 = chars[0] + A.substring(1);
String b1 = chars[1] + B.substring(1);

0

Diberikan inputstring:

Character.toUpperCase(input.charAt(0)) + input.substring(1).toLowerCase()

0

Anda dapat mencoba kode berikut:

public string capitalize(str) {
    String[] array = str.split(" ");
    String newStr;
    for(int i = 0; i < array.length; i++) {
        newStr += array[i].substring(0,1).toUpperCase() + array[i].substring(1) + " ";
    }
    return newStr.trim();
}

0
public static String capitalize(String str){
        String[] inputWords = str.split(" ");
        String outputWords = "";
        for (String word : inputWords){
            if (!word.isEmpty()){
                outputWords = outputWords + " "+StringUtils.capitalize(word);
            }
        }
        return outputWords;
    }

0

Saya ingin menambahkan cek NULL dan IndexOutOfBoundsException pada jawaban yang diterima.

String output = input.substring(0, 1).toUpperCase() + input.substring(1);

Kode Java:

  class Main {
      public static void main(String[] args) {
        System.out.println("Capitalize first letter ");
        System.out.println("Normal  check #1      : ["+ captializeFirstLetter("one thousand only")+"]");
        System.out.println("Normal  check #2      : ["+ captializeFirstLetter("two hundred")+"]");
        System.out.println("Normal  check #3      : ["+ captializeFirstLetter("twenty")+"]");
        System.out.println("Normal  check #4      : ["+ captializeFirstLetter("seven")+"]");

        System.out.println("Single letter check   : ["+captializeFirstLetter("a")+"]");
        System.out.println("IndexOutOfBound check : ["+ captializeFirstLetter("")+"]");
        System.out.println("Null Check            : ["+ captializeFirstLetter(null)+"]");
      }

      static String captializeFirstLetter(String input){
             if(input!=null && input.length() >0){
                input = input.substring(0, 1).toUpperCase() + input.substring(1);
            }
            return input;
        }
    }

Keluaran:

Normal  check #1      : [One thousand only]
Normal  check #2      : [Two hundred]
Normal  check #3      : [Twenty]
Normal  check #4      : [Seven]
Single letter check   : [A]
IndexOutOfBound check : []
Null Check            : [null]

0

Berikut ini akan memberikan Anda output konsisten yang sama terlepas dari nilai inputString Anda:

if(StringUtils.isNotBlank(inputString)) {
    inputString = StringUtils.capitalize(inputString.toLowerCase());
}

0

1. Menggunakan substring()Metode String

public static String capitalize(String str) {
    if(str== null || str.isEmpty()) {
        return str;
    }

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

Sekarang panggil saja capitalize()metode untuk mengubah huruf pertama dari string menjadi huruf besar:

System.out.println(capitalize("stackoverflow")); // Stackoverflow
System.out.println(capitalize("heLLo")); // HeLLo
System.out.println(capitalize(null)); // null

2. Apache Commons Lang

The StringUtilskelas dari Commons Lang menyediakan capitalize()metode yang juga dapat digunakan untuk tujuan ini:

System.out.println(StringUtils.capitalize("apache commons")); // Apache commons
System.out.println(StringUtils.capitalize("heLLO")); // HeLLO
System.out.println(StringUtils.uncapitalize(null)); // null

Tambahkan ketergantungan berikut ke pom.xmlfile Anda (hanya untuk Maven):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>

Berikut adalah artikel yang menjelaskan dua pendekatan ini secara rinci.


-1
class Test {
     public static void main(String[] args) {
        String newString="";
        String test="Hii lets cheCk for BEING String";  
        String[] splitString = test.split(" ");
        for(int i=0; i<splitString.length; i++){
            newString= newString+ splitString[i].substring(0,1).toUpperCase() 
                    + splitString[i].substring(1,splitString[i].length()).toLowerCase()+" ";
        }
        System.out.println("the new String is "+newString);
    }
 }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.