Cara menggunakan huruf besar untuk karakter pertama dari setiap kata

421

Apakah ada fungsi yang dibangun ke dalam Java yang mengkapitalisasi karakter pertama dari setiap kata dalam sebuah String, dan tidak memengaruhi yang lain?

Contoh:

  • jon skeet -> Jon Skeet
  • miles o'Brien-> Miles O'Brien(B tetap modal, ini mengesampingkan Judul Kasus)
  • old mcdonald-> Old Mcdonald*

* ( Old McDonaldakan ditemukan juga, tapi saya tidak berharap itu pintar ITU.)

Pandangan cepat pada Java String Documentation hanya mengungkapkan toUpperCase()dan toLowerCase(), yang tentu saja tidak memberikan perilaku yang diinginkan. Secara alami, hasil Google didominasi oleh dua fungsi tersebut. Sepertinya roda yang pasti sudah ditemukan, jadi tidak ada salahnya untuk bertanya sehingga aku bisa menggunakannya di masa depan.

WillfulWizard
sumber
18
Bagaimana dengan old mcdonald? Haruskah itu terjadi Old McDonald?
Bart Kiers
2
Saya tidak berharap fungsinya sepintar itu. (Meskipun jika Anda punya, saya akan senang melihatnya.) Hanya naik huruf pertama setelah ruang putih, tetapi abaikan sisanya.
WillfulWizard
1
Anda tidak akan dapat menemukan algoritme yang menangani kapitalisasi nama dengan benar setelah faktanya ... selama ada pasangan nama, yang salah satunya mungkin benar untuk orang tertentu, seperti MacDonald dan Macdonald, fungsinya akan tidak memiliki cara untuk mengetahui mana yang benar. Lebih baik melakukan apa yang Anda lakukan, meskipun Anda masih akan mendapatkan beberapa nama yang salah (seperti von Neumann).
Dave DuPlantis
Coba Burger King ...
Magno C

Jawaban:

732

WordUtils.capitalize(str)(dari teks-apache commons )

(Catatan: jika Anda ingin "fOO BAr"menjadi "Foo Bar", gunakan capitalizeFully(..)saja)

Bozho
sumber
5
Saya pikir maksud Anda WordUtils.capitalize (str). Lihat API untuk detailnya.
Hans Doggen
84
Menjaga filosofi saya selalu memilih jawaban yang merujuk pada perpustakaan umum.
Ravi Wallau
11
Untuk mengubah huruf pertama ke kata menjadi huruf kecil, gunakan capitalizeFully (str).
Umesh Rajbhandari
5
Apakah solusi ini benar ? itu tidak menurut saya! Jika Anda ingin menggunakan huruf besar "LAMborghini", Anda ingin "Lamborghini" pada akhirnya. Jadi WordUtils.capitalizeFully(str)solusinya.
basZero
3
@BasZero itu adalah jawaban yang tepat untuk pertanyaan yang diajukan. Saya akan memasukkan versi Sepenuhnya sebagai komentar.
Bozho
229

Jika Anda hanya khawatir tentang huruf pertama dari kata pertama yang ditulis dengan huruf besar:

private String capitalize(final String line) {
   return Character.toUpperCase(line.charAt(0)) + line.substring(1);
}
Nick Bolton
sumber
3
ini hanya mengubah huruf pertama dari kata pertama
Chrizzz
28
Memang, ini adalah niat saya.
Nick Bolton
13
@nbolton - Tetapi secara eksplisit mengabaikan maksud pertanyaan, dan gagal untuk kasus-kasus yang diberikan dalam contoh itu - dan itu menambahkan sedikit atau tidak sama sekali pada jawaban yang diberikan sebelumnya!
David Manheim
17
Sepotong kode ini tidak aman untuk crash! Bayangkan linemenjadi nol atau memiliki panjang <2.
stk
1
masih, kembalikan Character.toUpperCase (word.charAt (0)) + word.substring (1) .toLowerCase ()
Exceptyon
72

Metode berikut mengubah semua huruf menjadi huruf besar / kecil, tergantung pada posisinya dekat spasi atau karakter khusus lainnya.

public static String capitalizeString(String string) {
  char[] chars = string.toLowerCase().toCharArray();
  boolean found = false;
  for (int i = 0; i < chars.length; i++) {
    if (!found && Character.isLetter(chars[i])) {
      chars[i] = Character.toUpperCase(chars[i]);
      found = true;
    } else if (Character.isWhitespace(chars[i]) || chars[i]=='.' || chars[i]=='\'') { // You can add other chars here
      found = false;
    }
  }
  return String.valueOf(chars);
}
Benar Lembut
sumber
Saya akan memperbaiki dan menyederhanakan kondisi lingkaran: if(Character.isLetter(chars[i])) { if(!found) { chars[i] = Character.toUpperCase(chars[i]); } found = true; } else { found = false; }.
bancer
@bancer, dengan contoh Anda, Anda tidak dapat mengontrol karakter mana yang tidak akan diikuti oleh huruf besar.
True Soft
@ TrueSoft, saya tidak mengerti Anda. Mengapa Anda perlu mengontrol karakter apa yang mengikuti setelah huruf besar? Seperti yang saya pahami, penting bahwa karakter sebelumnya tidak akan berupa surat dan contoh saya memastikan hal itu. Ganti saja blok if-else-if Anda dengan blok if-else saya dan jalankan tes.
bancer
@ TrueSoft, untuk kejelasan saya akan mengubah nama foundmenjadi previousCharIsLetter.
bancer
9
Saya suka memiliki jawaban yang tidak menggunakan perpustakaan umum, karena sesekali Anda tidak dapat menggunakannya.
Heckman
39

Coba cara yang sangat sederhana ini

contoh givenString = "ram adalah anak baik"

public static String toTitleCase(String givenString) {
    String[] arr = givenString.split(" ");
    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < arr.length; i++) {
        sb.append(Character.toUpperCase(arr[i].charAt(0)))
            .append(arr[i].substring(1)).append(" ");
    }          
    return sb.toString().trim();
}  

Outputnya adalah: Ram Is Good Boy

Neelam Singh
sumber
1
kode ini menyebabkan server kami mogok: java.lang.StringIndexOutOfBoundsException: Indeks string di luar kisaran: 0
Chrizzz
32
@ Chzzzz jadi jangan komit kode Anda tidak menguji ... Jika Anda memberikan string kosong, itu crash. Salahmu, bukan milik Neelam.
Reinherd
1
Jika ada ruang di akhir maka terhempas maka saya menambahkan trim () pertama dan pisahkan string dengan spasi. Ini bekerja dengan sempurna
Hanuman
Jika seseorang mencari versi Kotlin-nya, ini dia: stackoverflow.com/a/55390188/1708390
Bugs Terjadi
16

Saya telah menulis Kelas kecil untuk memanfaatkan semua kata dalam sebuah String.

Opsional multiple delimiters, masing-masing dengan perilakunya (bermodalkan sebelum, setelah, atau keduanya, untuk menangani kasus seperti O'Brian);

Opsional Locale;

Jangan putus dengan Surrogate Pairs.

LIVE DEMO

Keluaran:

====================================
 SIMPLE USAGE
====================================
Source: cApItAlIzE this string after WHITE SPACES
Output: Capitalize This String After White Spaces

====================================
 SINGLE CUSTOM-DELIMITER USAGE
====================================
Source: capitalize this string ONLY before'and''after'''APEX
Output: Capitalize this string only beforE'AnD''AfteR'''Apex

====================================
 MULTIPLE CUSTOM-DELIMITER USAGE
====================================
Source: capitalize this string AFTER SPACES, BEFORE'APEX, and #AFTER AND BEFORE# NUMBER SIGN (#)
Output: Capitalize This String After Spaces, BeforE'apex, And #After And BeforE# Number Sign (#)

====================================
 SIMPLE USAGE WITH CUSTOM LOCALE
====================================
Source: Uniforming the first and last vowels (different kind of 'i's) of the Turkish word D[İ]YARBAK[I]R (DİYARBAKIR) 
Output: Uniforming The First And Last Vowels (different Kind Of 'i's) Of The Turkish Word D[i]yarbak[i]r (diyarbakir) 

====================================
 SIMPLE USAGE WITH A SURROGATE PAIR 
====================================
Source: ab 𐐂c de à
Output: Ab 𐐪c De À

Catatan: huruf pertama akan selalu menggunakan huruf besar (edit sumber jika Anda tidak menginginkannya).

Silakan bagikan komentar Anda dan bantu saya menemukan bug atau untuk memperbaiki kode ...

Kode:

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

public class WordsCapitalizer {

    public static String capitalizeEveryWord(String source) {
        return capitalizeEveryWord(source,null,null);
    }

    public static String capitalizeEveryWord(String source, Locale locale) {
        return capitalizeEveryWord(source,null,locale);
    }

    public static String capitalizeEveryWord(String source, List<Delimiter> delimiters, Locale locale) {
        char[] chars; 

        if (delimiters == null || delimiters.size() == 0)
            delimiters = getDefaultDelimiters();                

        // If Locale specified, i18n toLowerCase is executed, to handle specific behaviors (eg. Turkish dotted and dotless 'i')
        if (locale!=null)
            chars = source.toLowerCase(locale).toCharArray();
        else 
            chars = source.toLowerCase().toCharArray();

        // First charachter ALWAYS capitalized, if it is a Letter.
        if (chars.length>0 && Character.isLetter(chars[0]) && !isSurrogate(chars[0])){
            chars[0] = Character.toUpperCase(chars[0]);
        }

        for (int i = 0; i < chars.length; i++) {
            if (!isSurrogate(chars[i]) && !Character.isLetter(chars[i])) {
                // Current char is not a Letter; gonna check if it is a delimitrer.
                for (Delimiter delimiter : delimiters){
                    if (delimiter.getDelimiter()==chars[i]){
                        // Delimiter found, applying rules...                       
                        if (delimiter.capitalizeBefore() && i>0 
                            && Character.isLetter(chars[i-1]) && !isSurrogate(chars[i-1]))
                        {   // previous character is a Letter and I have to capitalize it
                            chars[i-1] = Character.toUpperCase(chars[i-1]);
                        }
                        if (delimiter.capitalizeAfter() && i<chars.length-1 
                            && Character.isLetter(chars[i+1]) && !isSurrogate(chars[i+1]))
                        {   // next character is a Letter and I have to capitalize it
                            chars[i+1] = Character.toUpperCase(chars[i+1]);
                        }
                        break;
                    }
                } 
            }
        }
        return String.valueOf(chars);
    }


    private static boolean isSurrogate(char chr){
        // Check if the current character is part of an UTF-16 Surrogate Pair.  
        // Note: not validating the pair, just used to bypass (any found part of) it.
        return (Character.isHighSurrogate(chr) || Character.isLowSurrogate(chr));
    }       

    private static List<Delimiter> getDefaultDelimiters(){
        // If no delimiter specified, "Capitalize after space" rule is set by default. 
        List<Delimiter> delimiters = new ArrayList<Delimiter>();
        delimiters.add(new Delimiter(Behavior.CAPITALIZE_AFTER_MARKER, ' '));
        return delimiters;
    } 

    public static class Delimiter {
        private Behavior behavior;
        private char delimiter;

        public Delimiter(Behavior behavior, char delimiter) {
            super();
            this.behavior = behavior;
            this.delimiter = delimiter;
        }

        public boolean capitalizeBefore(){
            return (behavior.equals(Behavior.CAPITALIZE_BEFORE_MARKER)
                    || behavior.equals(Behavior.CAPITALIZE_BEFORE_AND_AFTER_MARKER));
        }

        public boolean capitalizeAfter(){
            return (behavior.equals(Behavior.CAPITALIZE_AFTER_MARKER)
                    || behavior.equals(Behavior.CAPITALIZE_BEFORE_AND_AFTER_MARKER));
        }

        public char getDelimiter() {
            return delimiter;
        }
    }

    public static enum Behavior {
        CAPITALIZE_AFTER_MARKER(0),
        CAPITALIZE_BEFORE_MARKER(1),
        CAPITALIZE_BEFORE_AND_AFTER_MARKER(2);                      

        private int value;          

        private Behavior(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }           
    } 
Andrea Ligios
sumber
15
String toBeCapped = "i want this sentence capitalized";

String[] tokens = toBeCapped.split("\\s");
toBeCapped = "";

for(int i = 0; i < tokens.length; i++){
    char capLetter = Character.toUpperCase(tokens[i].charAt(0));
    toBeCapped +=  " " + capLetter + tokens[i].substring(1);
}
toBeCapped = toBeCapped.trim();
Reid Mac
sumber
1
Hmmm, saya pikir baris kedua dalam for loop harus membaca: toBeCapped + = "" + capLetter + token [i] .substring (1, token [i] .length ());
jengelsma
1
Tapi solusi ini akan menambah spasi di awal. Jadi, Anda mungkin perlu melakukan trim kiri.
Kamalakannan J
13

Saya membuat solusi di Java 8 yang IMHO lebih mudah dibaca.

public String firstLetterCapitalWithSingleSpace(final String words) {
    return Stream.of(words.trim().split("\\s"))
    .filter(word -> word.length() > 0)
    .map(word -> word.substring(0, 1).toUpperCase() + word.substring(1))
    .collect(Collectors.joining(" "));
}

Inti untuk solusi ini dapat ditemukan di sini: https://gist.github.com/Hylke1982/166a792313c5e2df9d31

Hylke1982
sumber
10

Menggunakannya org.apache.commons.lang.StringUtilsmembuatnya sangat sederhana.

capitalizeStr = StringUtils.capitalize(str);
Amir Bareket
sumber
2
@ Ash StringUtils.capitalise(str)sudah ditinggalkan. Lihat: commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/…
Navigatron
Ini hanya memanfaatkan karakter pertama dari string, bukan karakter pertama dari setiap kata dalam string. WordUtils hanya ditinggalkan karena telah berpindah dari commons lang ke commons text commons.apache.org/proper/commons-text/javadocs/api-release/org/…
opticyclic
Bukan ide yang baik untuk menggunakan perpustakaan eksternal untuk tugas kecil.
Stack Overflow
7

Dengan kode sederhana ini :

String example="hello";

example=example.substring(0,1).toUpperCase()+example.substring(1, example.length());

System.out.println(example);

Hasil: Halo

Adrian
sumber
6
bagaimana dengan HELLO itu mengembalikan HELLO tetapi diharapkan Halo sehingga Anda akan menggunakan toLowerCase () di SubString kedua
Trikaldarshi
5

Saya menggunakan fungsi berikut. Saya pikir ini lebih cepat dalam kinerja.

public static String capitalize(String text){
    String c = (text != null)? text.trim() : "";
    String[] words = c.split(" ");
    String result = "";
    for(String w : words){
        result += (w.length() > 1? w.substring(0, 1).toUpperCase(Locale.US) + w.substring(1, w.length()).toLowerCase(Locale.US) : w) + " ";
    }
    return result.trim();
}
Tassadar
sumber
3
Selalu gunakan StringBuilder ketika Anda menggabungkan daripada + =
chitgoks
2
Menurut Anda mengapa ini lebih cepat?
Peter Mortensen
5

Dari Java 9+

Anda dapat menggunakan String::replaceAllseperti ini:

public static void upperCaseAllFirstCharacter(String text) {
    String regex = "\\b(.)(.*?)\\b";
    String result = Pattern.compile(regex).matcher(text).replaceAll(
            matche -> matche.group(1).toUpperCase() + matche.group(2)
    );

    System.out.println(result);
}

Contoh:

upperCaseAllFirstCharacter("hello this is Just a test");

Keluaran

Hello This Is Just A Test
YCF_L
sumber
4

Gunakan metode Split untuk membagi string Anda menjadi kata-kata, lalu gunakan fungsi string bawaan untuk mengubah setiap kata menjadi kapital, lalu menambahkannya bersama-sama.

Kode semu (ish)

string = "the sentence you want to apply caps to";
words = string.split(" ") 
string = ""
for(String w: words)

//This line is an easy way to capitalize a word
    word = word.toUpperCase().replace(word.substring(1), word.substring(1).toLowerCase())

    string += word

Pada akhirnya string terlihat seperti "Kalimat yang Kamu Ingin Terapkan Caps To"

Paul
sumber
4

Ini mungkin berguna jika Anda perlu menggunakan huruf besar judul. Ini mengkapitalisasi setiap substring yang dibatasi oleh" " , kecuali untuk string tertentu seperti "a"atau "the". Saya belum menjalankannya karena sudah terlambat, harusnya baik-baik saja. Menggunakan Apache Commons StringUtils.join()pada satu titik. Anda dapat menggantinya dengan loop sederhana jika diinginkan.

private static String capitalize(String string) {
    if (string == null) return null;
    String[] wordArray = string.split(" "); // Split string to analyze word by word.
    int i = 0;
lowercase:
    for (String word : wordArray) {
        if (word != wordArray[0]) { // First word always in capital
            String [] lowercaseWords = {"a", "an", "as", "and", "although", "at", "because", "but", "by", "for", "in", "nor", "of", "on", "or", "so", "the", "to", "up", "yet"};
            for (String word2 : lowercaseWords) {
                if (word.equals(word2)) {
                    wordArray[i] = word;
                    i++;
                    continue lowercase;
                }
            }
        }
        char[] characterArray = word.toCharArray();
        characterArray[0] = Character.toTitleCase(characterArray[0]);
        wordArray[i] = new String(characterArray);
        i++;
    }
    return StringUtils.join(wordArray, " "); // Re-join string
}
Dominykas Mostauskis
sumber
Istirahat jika string memiliki ruang ganda di dalamnya, yang bodoh untuk input, tetapi FYI.
JustTrying
4
public static String toTitleCase(String word){
    return Character.toUpperCase(word.charAt(0)) + word.substring(1);
}

public static void main(String[] args){
    String phrase = "this is to be title cased";
    String[] splitPhrase = phrase.split(" ");
    String result = "";

    for(String word: splitPhrase){
        result += toTitleCase(word) + " ";
    }
    System.out.println(result.trim());
}
Taladork
sumber
Selamat Datang di Stack Overflow! Secara umum, jawaban akan jauh lebih membantu jika mereka menyertakan penjelasan tentang apa yang dimaksudkan untuk dilakukan oleh kode, dan mengapa hal itu menyelesaikan masalah tanpa memperkenalkan orang lain.
Neuron
Solusi paling sederhana sejauh ini dan hindari menggunakan
lib
3
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   

System.out.println("Enter the sentence : ");

try
{
    String str = br.readLine();
    char[] str1 = new char[str.length()];

    for(int i=0; i<str.length(); i++)
    {
        str1[i] = Character.toLowerCase(str.charAt(i));
    }

    str1[0] = Character.toUpperCase(str1[0]);
    for(int i=0;i<str.length();i++)
    {
        if(str1[i] == ' ')
        {                   
            str1[i+1] =  Character.toUpperCase(str1[i+1]);
        }
        System.out.print(str1[i]);
    }
}
catch(Exception e)
{
    System.err.println("Error: " + e.getMessage());
}
Suganya
sumber
Ini adalah jawaban paling sederhana, dasar dan terbaik untuk pemula seperti saya!
abhishah901
3

Saya memutuskan untuk menambahkan satu lagi solusi untuk memanfaatkan kata dalam string:

  • kata-kata didefinisikan di sini sebagai karakter huruf-atau-digit yang berdekatan;
  • pasangan pengganti juga disediakan;
  • kode telah dioptimalkan untuk kinerja; dan
  • masih kompak.

Fungsi:

public static String capitalize(String string) {
  final int sl = string.length();
  final StringBuilder sb = new StringBuilder(sl);
  boolean lod = false;
  for(int s = 0; s < sl; s++) {
    final int cp = string.codePointAt(s);
    sb.appendCodePoint(lod ? Character.toLowerCase(cp) : Character.toUpperCase(cp));
    lod = Character.isLetterOrDigit(cp);
    if(!Character.isBmpCodePoint(cp)) s++;
  }
  return sb.toString();
}

Contoh panggilan:

System.out.println(capitalize("An à la carte StRiNg. Surrogate pairs: 𐐪𐐪."));

Hasil:

An À La Carte String. Surrogate Pairs: 𐐂𐐪.
Christian Grün
sumber
3

Menggunakan:

    String text = "jon skeet, miles o'brien, old mcdonald";

    Pattern pattern = Pattern.compile("\\b([a-z])([\\w]*)");
    Matcher matcher = pattern.matcher(text);
    StringBuffer buffer = new StringBuffer();
    while (matcher.find()) {
        matcher.appendReplacement(buffer, matcher.group(1).toUpperCase() + matcher.group(2));
    }
    String capitalized = matcher.appendTail(buffer).toString();
    System.out.println(capitalized);
curd0
sumber
Berfungsi sempurna dengan toLowerCase -> "Matcher matcher = pattern.matcher (text.toLowerCase ());" (Untuk teks entri seperti "JOHN DOE")
smillien62
3

Ada banyak cara untuk mengonversi huruf pertama dari kata pertama menjadi huruf besar. Saya punya ide. Ini sangat sederhana:

public String capitalize(String str){

     /* The first thing we do is remove whitespace from string */
     String c = str.replaceAll("\\s+", " ");
     String s = c.trim();
     String l = "";

     for(int i = 0; i < s.length(); i++){
          if(i == 0){                              /* Uppercase the first letter in strings */
              l += s.toUpperCase().charAt(i);
              i++;                                 /* To i = i + 1 because we don't need to add               
                                                    value i = 0 into string l */
          }

          l += s.charAt(i);

          if(s.charAt(i) == 32){                   /* If we meet whitespace (32 in ASCII Code is whitespace) */
              l += s.toUpperCase().charAt(i+1);    /* Uppercase the letter after whitespace */
              i++;                                 /* Yo i = i + 1 because we don't need to add
                                                   value whitespace into string l */
          }        
     }
     return l;
}
Phuoc Le
sumber
Terima kasih telah mencoba menambahkan jawaban. Ini adalah ide yang masuk akal, tetapi perhatikan bahwa ada fungsi dasar yang sudah melakukan ini, dan kode yang melakukan hal ini mirip dengan apa yang Anda berikan, dan jawaban yang diterima sudah menjabarkan semuanya dengan sangat jelas.
David Manheim
2
  package com.test;

 /**
   * @author Prasanth Pillai
   * @date 01-Feb-2012
   * @description : Below is the test class details
   * 
   * inputs a String from a user. Expect the String to contain spaces and    alphanumeric     characters only.
   * capitalizes all first letters of the words in the given String.
   * preserves all other characters (including spaces) in the String.
   * displays the result to the user.
   * 
   * Approach : I have followed a simple approach. However there are many string    utilities available 
   * for the same purpose. Example : WordUtils.capitalize(str) (from apache commons-lang)
   *
   */
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;

  public class Test {

public static void main(String[] args) throws IOException{
    System.out.println("Input String :\n");
    InputStreamReader converter = new InputStreamReader(System.in);
    BufferedReader in = new BufferedReader(converter);
    String inputString = in.readLine();
    int length = inputString.length();
    StringBuffer newStr = new StringBuffer(0);
    int i = 0;
    int k = 0;
    /* This is a simple approach
     * step 1: scan through the input string
     * step 2: capitalize the first letter of each word in string
     * The integer k, is used as a value to determine whether the 
     * letter is the first letter in each word in the string.
     */

    while( i < length){
        if (Character.isLetter(inputString.charAt(i))){
            if ( k == 0){
            newStr = newStr.append(Character.toUpperCase(inputString.charAt(i)));
            k = 2;
            }//this else loop is to avoid repeatation of the first letter in output string 
            else {
            newStr = newStr.append(inputString.charAt(i));
            }
        } // for the letters which are not first letter, simply append to the output string. 
        else {
            newStr = newStr.append(inputString.charAt(i));
            k=0;
        }
        i+=1;           
    }
    System.out.println("new String ->"+newStr);
    }
}
Prasanth
sumber
2

Ini adalah fungsi sederhana

public static String capEachWord(String source){
    String result = "";
    String[] splitString = source.split(" ");
    for(String target : splitString){
        result += Character.toUpperCase(target.charAt(0))
                + target.substring(1) + " ";
    }
    return result.trim();
}
Himanshu Agrawal
sumber
1
Jangan gunakan string-concation untuk membuat string panjang, itu lambat sekali: stackoverflow.com/questions/15177987/…
Lukas Knuth
2

Ini hanyalah cara lain untuk melakukannya:

private String capitalize(String line)
{
    StringTokenizer token =new StringTokenizer(line);
    String CapLine="";
    while(token.hasMoreTokens())
    {
        String tok = token.nextToken().toString();
        CapLine += Character.toUpperCase(tok.charAt(0))+ tok.substring(1)+" ";        
    }
    return CapLine.substring(0,CapLine.length()-1);
}
foobar
sumber
2

Metode yang dapat digunakan kembali untuk intiCap:

    public class YarlagaddaSireeshTest{

    public static void main(String[] args) {
        String FinalStringIs = "";
        String testNames = "sireesh yarlagadda test";
        String[] name = testNames.split("\\s");

        for(String nameIs :name){
            FinalStringIs += getIntiCapString(nameIs) + ",";
        }
        System.out.println("Final Result "+ FinalStringIs);
    }

    public static String getIntiCapString(String param) {
        if(param != null && param.length()>0){          
            char[] charArray = param.toCharArray(); 
            charArray[0] = Character.toUpperCase(charArray[0]); 
            return new String(charArray); 
        }
        else {
            return "";
        }
    }
}
Sireesh Yarlagadda
sumber
2

Ini solusinya.

Saya menemukan masalah ini malam ini dan memutuskan untuk mencarinya. Saya menemukan jawaban oleh Neelam Singh yang hampir sampai, jadi saya memutuskan untuk memperbaiki masalah (putus dengan tali kosong) dan menyebabkan sistem crash.

Metode yang Anda cari disebutkan di capString(String s)bawah ini. Ternyata "Ini baru jam 5 pagi di sini" menjadi "Ini Hanya jam 5 pagi Di Sini".

Kode ini cukup baik dikomentari, jadi selamat menikmati.

package com.lincolnwdaniel.interactivestory.model;

    public class StringS {

    /**
     * @param s is a string of any length, ideally only one word
     * @return a capitalized string.
     * only the first letter of the string is made to uppercase
     */
    public static String capSingleWord(String s) {
        if(s.isEmpty() || s.length()<2) {
            return Character.toUpperCase(s.charAt(0))+"";
        } 
        else {
            return Character.toUpperCase(s.charAt(0)) + s.substring(1);
        }
    }

    /**
     *
     * @param s is a string of any length
     * @return a title cased string.
     * All first letter of each word is made to uppercase
     */
    public static String capString(String s) {
        // Check if the string is empty, if it is, return it immediately
        if(s.isEmpty()){
            return s;
        }

        // Split string on space and create array of words
        String[] arr = s.split(" ");
        // Create a string buffer to hold the new capitalized string
        StringBuffer sb = new StringBuffer();

        // Check if the array is empty (would be caused by the passage of s as an empty string [i.g "" or " "],
        // If it is, return the original string immediately
        if( arr.length < 1 ){
            return s;
        }

        for (int i = 0; i < arr.length; i++) {
            sb.append(Character.toUpperCase(arr[i].charAt(0)))
                    .append(arr[i].substring(1)).append(" ");
        }
        return sb.toString().trim();
    }
}
lwdthe1
sumber
2

1. Java 8 Streaming

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

    return Arrays.stream(str.split("\\s+"))
            .map(t -> t.substring(0, 1).toUpperCase() + t.substring(1))
            .collect(Collectors.joining(" "));
}

Contoh:

System.out.println(capitalizeAll("jon skeet")); // Jon Skeet
System.out.println(capitalizeAll("miles o'Brien")); // Miles O'Brien
System.out.println(capitalizeAll("old mcdonald")); // Old Mcdonald
System.out.println(capitalizeAll(null)); // null

Untuk foo bARke Foo Bar, ganti map()metode dengan yang berikut:

.map(t -> t.substring(0, 1).toUpperCase() + t.substring(1).toLowerCase())

2. String.replaceAll()(Java 9+)

ublic static String capitalizeAll(String str) {
    if (str == null || str.isEmpty()) {
        return str;
    }

    return Pattern.compile("\\b(.)(.*?)\\b")
            .matcher(str)
            .replaceAll(match -> match.group(1).toUpperCase() + match.group(2));
}

Contoh:

System.out.println(capitalizeAll("12 ways to learn java")); // 12 Ways To Learn Java
System.out.println(capitalizeAll("i am atta")); // I Am Atta
System.out.println(capitalizeAll(null)); // null

3. Teks Apache Commons

System.out.println(WordUtils.capitalize("love is everywhere")); // Love Is Everywhere
System.out.println(WordUtils.capitalize("sky, sky, blue sky!")); // Sky, Sky, Blue Sky!
System.out.println(WordUtils.capitalize(null)); // null

Untuk titlecase:

System.out.println(WordUtils.capitalizeFully("fOO bAR")); // Foo Bar
System.out.println(WordUtils.capitalizeFully("sKy is BLUE!")); // Sky Is Blue!

Untuk detailnya, cek tutorial ini .

attacomsian
sumber
1

Bagi Anda yang menggunakan Velocity di MVC Anda, Anda bisa menggunakan capitalizeFirstLetter()metode dari kelas StringUtils .

Shogo Yahagi
sumber
1
String s="hi dude i                                 want apple";
    s = s.replaceAll("\\s+"," ");
    String[] split = s.split(" ");
    s="";
    for (int i = 0; i < split.length; i++) {
        split[i]=Character.toUpperCase(split[i].charAt(0))+split[i].substring(1);
        s+=split[i]+" ";
        System.out.println(split[i]);
    }
    System.out.println(s);
merasa baik dan pemrograman
sumber
1
package corejava.string.intern;

import java.io.DataInputStream;

import java.util.ArrayList;

/*
 * wap to accept only 3 sentences and convert first character of each word into upper case
 */

public class Accept3Lines_FirstCharUppercase {

    static String line;
    static String words[];
    static ArrayList<String> list=new ArrayList<String>();

    /**
     * @param args
     */
    public static void main(String[] args) throws java.lang.Exception{

        DataInputStream read=new DataInputStream(System.in);
        System.out.println("Enter only three sentences");
        int i=0;
        while((line=read.readLine())!=null){
            method(line);       //main logic of the code
            if((i++)==2){
                break;
            }
        }
        display();
        System.out.println("\n End of the program");

    }

    /*
     * this will display all the elements in an array
     */
    public static void display(){
        for(String display:list){
            System.out.println(display);
        }
    }

    /*
     * this divide the line of string into words 
     * and first char of the each word is converted to upper case
     * and to an array list
     */
    public static void method(String lineParam){
        words=line.split("\\s");
        for(String s:words){
            String result=s.substring(0,1).toUpperCase()+s.substring(1);
            list.add(result);
        }
    }

}
Elias Sheikh
sumber
1

Jika Anda lebih suka Jambu ...

String myString = ...;

String capWords = Joiner.on(' ').join(Iterables.transform(Splitter.on(' ').omitEmptyStrings().split(myString), new Function<String, String>() {
    public String apply(String input) {
        return Character.toUpperCase(input.charAt(0)) + input.substring(1);
    }
}));
aaronvargas
sumber
1
String toUpperCaseFirstLetterOnly(String str) {
    String[] words = str.split(" ");
    StringBuilder ret = new StringBuilder();
    for(int i = 0; i < words.length; i++) {
        ret.append(Character.toUpperCase(words[i].charAt(0)));
        ret.append(words[i].substring(1));
        if(i < words.length - 1) {
            ret.append(' ');
        }
    }
    return ret.toString();
}
Krunal
sumber
1

Cara singkat dan tepat adalah sebagai berikut:

String name = "test";

name = (name.length() != 0) ?name.toString().toLowerCase().substring(0,1).toUpperCase().concat(name.substring(1)): name;
--------------------
Output
--------------------
Test
T 
empty
--------------------

Ini berfungsi tanpa kesalahan jika Anda mencoba dan mengubah nilai nama menjadi tiga nilai. Kesalahan gratis.

Daniel Adenew
sumber
bagaimana jika itu lebih dari satu kata
luckyguy73