Bir dizedeki her kelimenin ilk karakterini büyütme


421

Bir dizedeki her kelimenin ilk karakterini büyük harf olarak kullanan ve diğerlerini etkilemeyen Java'da yerleşik bir işlev var mı?

Örnekler:

  • jon skeet -> Jon Skeet
  • miles o'Brien-> Miles O'Brien(B sermaye olmaya devam eder, bu Başlık Durumunu hariç tutar)
  • old mcdonald-> Old Mcdonald*

* ( Old McDonaldbu da olurdu, ama bunun akıllı olmasını beklemiyorum.)

Hızlı bir bakış Java dize Belgeler sadece ortaya koymaktadır toUpperCase()ve toLowerCase()tabii istenilen davranışı vermeyin, hangi. Doğal olarak, Google sonuçlarına bu iki işlev hakimdir. Daha önce icat edilmiş olması gereken bir tekerlek gibi görünüyor, bu yüzden gelecekte kullanmak için sormak acı veremedi.


18
Ne olmuş old mcdonald? Bu olmalı mı Old McDonald?
Bart Kiers

2
Fonksiyonun bu kadar akıllı olmasını beklemiyorum. (Eğer bir tane varsa, onu görmek için mutlu olurdu.) Sadece boşluktan sonra ilk harfi yukarı, ama geri kalanı yoksay.
WillfulWizard


1
Zaten adından sonra ad büyük harf kullanımını düzgün bir şekilde işleyen bir algoritma bulamazsınız ... her ikisi de MacDonald ve Macdonald gibi belirli bir kişi için doğru olabilecek isimler çiftleri olduğu sürece, işlev hangisinin doğru olduğunu bilmenin hiçbir yolu yok. Yaptığınızı yapmak daha iyidir, ancak bazı isimleri yanlış anlayacaksınız (von Neumann gibi).
Dave DuPlantis

Burger King'i deneyin ...
Magno C

Yanıtlar:


732

WordUtils.capitalize(str)( apache ortak metinlerinden )

(Not: gerekiyorsa "fOO BAr"olmak "Foo Bar", daha sonra kullanmak capitalizeFully(..)yerine)


5
WordUtils.capitalize (str) demek istediğini düşünüyorum. Ayrıntılar için API'ya bakın.
Hans Doggen

84
Müşterek kütüphaneleriyle ilgili cevapları her zaman oylama felsefemi sürdürmek.
Ravi Wallau

11
İlk olmayan harfi küçük harfe dönüştürmek için capitalizeFully (str) kullanın.
Umesh Rajbhandari

5
Bu çözüm gerçekten doğru mu? bence değil! "LAMborghini" yi büyük harfle yazmak istiyorsanız, sonunda "Lamborghini" yi kullanmak istersiniz. Yani WordUtils.capitalizeFully(str)bir çözümdür.
basZero

3
@BasZero, sorulan soruya doğru cevaptır. Tam sürümü yorum olarak ekleyeceğim.
Bozho

229

Büyük harfle yazılan ilk kelimenin yalnızca ilk harfinden endişe ediyorsanız:

private String capitalize(final String line) {
   return Character.toUpperCase(line.charAt(0)) + line.substring(1);
}

3
bu sadece ilk kelimenin ilk harfini değiştirir
Chrizzz

28
Gerçekten, niyetim buydu.
Nick Bolton

13
@nbolton - Ancak sorunun amacını açıkça görmezden gelir ve bu örnekte verilen vakalar için başarısız olur - ve daha önce verilen cevaplara çok az şey ekler!
David Manheim

17
Bu kod parçası güvenli değil! Düşünün lineboş olarak veya <2 bir uzunluğa sahip olan
stk

1
yine de Character.toUpperCase (word.charAt (0)) + word.substring (1) .toLowerCase ()
Dışında

72

Aşağıdaki yöntem, boşluk veya diğer özel karakterlerin yakınındaki konumlarına bağlı olarak tüm harfleri büyük / küçük harfe dönüştürür.

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);
}

Ben geliştirmek ve döngü koşulları basitleştirmek olacaktır: if(Character.isLetter(chars[i])) { if(!found) { chars[i] = Character.toUpperCase(chars[i]); } found = true; } else { found = false; }.
bancer

@ bancer, örneğinizle hangi karakterlerin ardından büyük harf gelmeyeceğini kontrol edemezsiniz.
Gerçek Yumuşak

@TrueSoft, seni anlamıyorum. Büyük harften sonra neden hangi karakterleri izleyeceğinizi kontrol etmeniz gerekiyor? Anladığım kadarıyla, önceki karakterin bir harf olmaması önemlidir ve örneğim bunu sağlar. Sadece if-else-if bloğunuzu if-else bloğumla değiştirin ve bir test yapın.
bancer

@TrueSoft, netlik için ben adlandırmak istiyorum foundiçin previousCharIsLetter.
bancer

9
Müşterek kütüphaneyi kullanmayan cevapları severim, çünkü arada bir kullanamazsınız.
Heckman

38

Bu çok basit yolu deneyin

givenString = "koç iyi çocuk"

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();
}  

Çıktı: Ram Is Good Boy


1
bu kod sunucumuzun çökmesine neden oldu: java.lang.StringIndexOutOfBoundsException: Dize dizini aralık dışında: 0
Chrizzz

32
@Chrizzz bu yüzden test etmediniz kodunu taahhüt etmeyin ... Boş bir dize sağlarsanız, çöküyor. Senin hatan, Neelam'ın değil.
Reinherd

1
Sonunda bir boşluk varsa, o zaman çöküyor o zaman önce trim () ekledim ve boşluk ile split dize ekledim. Mükemmel çalıştı
Hanuman

Birisi Kotlin versiyonunu arıyorsa, işte burada: stackoverflow.com/a/55390188/1708390
Bugs

16

Bir String'deki tüm kelimeleri büyük harf yapmak için küçük bir Sınıf yazdım.

İsteğe bağlı olarak multiple delimiters, her biri davranışı olanO'Brian );

İsteğe bağlı Locale ;

İle ara verme Surrogate Pairs .

CANLI DEMO

Çıktı:

====================================
 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 À

Not: ilk harf her zaman büyük yazılır (istemiyorsanız kaynağı düzenleyin).

Lütfen yorumlarınızı paylaşın ve hataları bulmama veya kodu geliştirmeme yardımcı olun ...

Kod:

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;
        }           
    } 

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();

1
Hmmm, for döngüsündeki ikinci satırın okuması gerektiğini düşünüyorum: toBeCapped + = "" + capLetter + belirteçleri [i] .substring (1, belirteçler [i] .length ());
jengelsma

1
Ancak bu çözüm başlangıçta bir boşluk ekleyecektir. Bu yüzden sol trim yapmanız gerekebilir.
Kamalakannan J

13

Java 8'de IMHO'nun daha okunabilir bir çözümünü yaptım.

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(" "));
}

Bu çözümün özeti burada bulunabilir: https://gist.github.com/Hylke1982/166a792313c5e2df9d31


10

Kullanmak org.apache.commons.lang.StringUtilsçok basit.

capitalizeStr = StringUtils.capitalize(str);

2
@Ash StringUtils.capitalise(str)kullanımdan kaldırıldı. Bkz: commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/…
Navigatron

Bu, dizgideki her kelimenin ilk karakterini değil, dizenin ilk karakterini büyük harfle yazacaktır. WordUtils yalnızca kullanımdan kaldırıldı, çünkü ortak konuşma şeridinden
optik

Küçük görevler için harici kütüphane kullanmak iyi bir fikir değil.
Stack Overflow

7

Bu basit kodla :

String example="hello";

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

System.out.println(example);

Sonuç: Merhaba


6
Peki ya HELLO döndürür ama beklenen Merhaba, bu yüzden ikinci SubString'de toLowerCase () kullanacaksınız
Trikaldarshi

5

Aşağıdaki işlevi kullanıyorum. Performansta daha hızlı olduğunu düşünüyorum.

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();
}

3
Eğer + = ziyade bağlamak her zaman StringBuilder kullanmak
chitgoks

2
Sizce neden daha hızlı?
Peter Mortensen

5

Java 9+ sürümünden

şöyle kullanabilirsiniz String::replaceAll:

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);
}

Misal :

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

çıktılar

Hello This Is Just A Test

4

Dizenizi kelimelere bölmek için Bölme yöntemini kullanın, ardından her bir kelimeyi büyük harf yapmak için yerleşik dize işlevlerini kullanın, sonra birlikte ekleyin.

Sahte kod (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

Sonunda dize "Caps uygulamak istediğiniz cümle" gibi bir şey görünüyor


4

Başlıkları büyük harfe çevirmeniz gerekiyorsa bu yararlı olabilir. Veya " "gibi belirli dizeler hariç, sınırlandırılan her alt dizeyi büyük harfle kullanır . Henüz koşmadım çünkü geç oldu, yine de iyi olmalı. Bir noktada Apache Commons kullanır . İsterseniz basit bir döngü ile değiştirebilirsiniz."a""the"StringUtils.join()

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
}

Dize içinde giriş için aptal, ancak FYI olan çift boşluk varsa kırılır.
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());
}

Stack Overflow'a hoş geldiniz! Genellikle, kodun ne yapması gerektiği ve başkalarını tanıtmadan sorunu neden çözdüğüne dair bir açıklama içeriyorsa, yanıtlar çok daha yararlıdır.
Neuron

Şimdiye kadar en basit çözüm ve dış
kütleleri

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());
}

Bu benim gibi bir acemi için en basit, temel ve en iyi cevap!
abhishah901

3

Dizede büyük harf kullanımı için bir çözüm daha eklemeye karar verdim:

  • kelimeler burada bitişik harf veya rakam karakterleri olarak tanımlanır;
  • vekil çiftler de sağlanır;
  • kod performans için optimize edilmiştir; ve
  • hala kompakt.

İşlev:

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();
}

Örnek çağrı:

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

Sonuç:

An À La Carte String. Surrogate Pairs: 𐐂𐐪.

3

kullanın:

    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);

ToLowerCase -> "Matcher matcher = pattern.matcher (text.toLowerCase ());" ile mükemmel çalışır ("JOHN DOE" gibi giriş metinleri için)
smillien62

3

Büyük harf olan ilk kelimenin ilk harfini dönüştürmenin birçok yolu vardır. Bir fikrim var. Çok basit:

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;
}

Yanıt eklemeye çalıştığınız için teşekkür ederiz. Bu makul bir fikirdir, ancak bunu zaten yapan temel işlevlerin olduğunu ve bunu sağladığınızla benzer şekilde yapan kodun olduğunu ve kabul edilen cevapların zaten hepsini çok net bir şekilde özetlediğini unutmayın.
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);
    }
}

2

İşte basit bir işlev

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();
}

1
Uzun dizeler oluşturmak için string-concation kullanmayın, acı verici bir şekilde yavaş: stackoverflow.com/questions/15177987/…
Lukas Knuth

2

Bu, bunu yapmanın başka bir yoludur:

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);
}

2

İntiCap için yeniden kullanılabilir yöntem:

    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 "";
        }
    }
}

2

İşte benim çözümüm.

Bu gece bu problemle karşılaştım ve aramaya karar verdim. Neelam Singh tarafından neredeyse orada olan bir cevap buldum, bu yüzden sorunu düzeltmeye karar verdim (boş dizelerde kırıldı) ve bir sistem çökmesine neden oldu.

Aradığınız yöntem capString(String s)aşağıda belirtilmiştir. "Burada sadece sabah 5'te", "Burada sadece sabah 5'te" olur.

Kod oldukça iyi yorumlanmış, bu yüzden tadını çıkarın.

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();
    }
}

2

1. Java 8 Akışları

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(" "));
}

Örnekler:

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

İçin foo bARiçin Foo Baryerine map()aşağıdaki yöntemi ile:

.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));
}

Örnekler:

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. Apache Commons Metni

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

Titlecase için:

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

Ayrıntılar için bu eğiticiye göz atın .



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);

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);
        }
    }

}

1

Guava'yı tercih ederseniz ...

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);
    }
}));

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();
}

1

Kısa ve kesin yol aşağıdaki gibidir:

String name = "test";

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

Ad değerini üç değere değiştirmeye çalışırsanız hatasız çalışır. Hatasız.


ne birden fazla kelime
olursa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.