Java kullanarak bir dizedeki ilk kelime harfini nasıl büyük yazabilirim?


223

Örnek dizeler

one thousand only
two hundred
twenty
seven

Bir dizenin ilk karakterini büyük harfle nasıl değiştiririm ve diğer harflerin büyüklüğünü nasıl değiştirmem?

Değişiklikten sonra şöyle olmalıdır:

One thousand only
Two hundred
Twenty
Seven

Not: Bunu yapmak için apache.commons.lang.WordUtils kullanmak istemiyorum.


1
@eat_a_lemon: az dışındaki durumlarla (örn. sayılar, noktalama işaretleri, aksan harfleri, Latin olmayan karakterler) ilgili olarak Character.toUpperCase () öğesini kullanmak çok daha iyidir.
Simon Nickerson

Yanıtlar:


545

Yalnızca bir dizenin ilk harfini büyük yapmak inputve gerisini yalnız bırakmak istiyorsanız :

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

Şimdi outputistediğiniz her şeye sahip olacaksınız. Bunu inputkullanmadan önce en az bir karakter uzunluğunda olup olmadığınızı kontrol edin , aksi takdirde bir istisna alırsınız.


37
Ayrıca, ilk önce tüm girdiyi alıp küçük harfli yapabilirim veya örneğinizi aşağıdaki gibi yeniden çalıştırabilirim: String output = input.substring (0, 1) .toUpperCase () + input.substring (1) .toLowerCase ();
David Brossard

2
Ve 1 harfli bir dize, hatta 0 olabileceği için dizenin uzunluğunu kontrol etmek istersiniz.
Marek

1
Ben burada getter ve setter adı oluşturma için buldum, bu nedenle String'in geri kalanında LowerCase alan adlandırma kıracak. Verilen cevap benim için mükemmel.
kaiser

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

Sadece ... tam bir çözüm, görüyorum ki, sadece herkesin gönderdiği şeyi = P.


12
Güzel. Ben "tek katmanlı":return original.length() == 0 ? original : original.substring(0, 1).toUpperCase() + original.substring(1);
mharper

2
@mharper:, if length() == 0güvenli bir şekilde olduğunu söyleyemeyiz ""ve bunun yerine geri veremeyiz originalmi? Bize bir astarda birkaç karakter kazandırır. Soruyorum çünkü Java'nın gotcha'larla dolu bir dil olduğunu hissediyorum, sıfır uzunluklu bir diziye sahip olmanın başka bir yolu olsaydı dürüst olmazdım.
ArtOfWarfare

Tüm gerçeği konuşuyorsun @ArtOfWarfare.
mharper

Not: Bu işlemi İngilizce olmayan harflerle de yapmak isteyebilirsiniz. Bu durumda, toUpperCase () yönteminde yerel ayarı belirtmelisiniz.
Makalele

String.toUpperCase(Locale)Yerel Ayar'ın metni eşleştirmesi gerektiğinden, rasgele bir dize için kullanmak mümkün değildir . Evet, kullanılmalı, ancak hangisinin kullanılacağı her zaman net değil Locale...
Christopher Schultz

81

En basit yol org.apache.commons.lang.StringUtilssınıfı kullanmaktır

StringUtils.capitalize(Str);


8
Burada küçük bir yan not var. Yalnızca önceden büyük harfle yazılmamış dizeler için çalışır.
jobbert

5
@jobbert Lütfen yorumunuzu netleştirin. Dizeler zaten büyük harfle yazılırsa, adlandırılan bir yöntem olmasına rağmen bunları büyük harflerle kapatacak capitalizemı?
Cœur

25

Ayrıca, var org.springframework.util.StringUtilsyılında Bahar 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

Bu OP sorusuna cevap vermiyor. Diğer harflerin durumunu değiştirdiği için.
Lieuwe Rooijakkers

Soruya bak. Muhtemelen soruyu iyi anlamadınız.
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
Bu, bir bütün olarak dizenin değil, her kelimenin ilk harfini büyük harfle yazacaktır . OP tarafından sağlanan örneklere bakınız. Dizenin sonunda bir boşluk varsa da sorunlar olabilir.
tobias_k

2

Buyurun (umarım bu size fikir verir):

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

}

ve diğer harflerin durumunu değiştirmez. Ayrıca kullanımınız StdInve StdOutçok Java-y değil. :-)
Simon Nickerson

2

Bunun için sadece tek bir satır kodu gereklidir. eğer String A = scanner.nextLine(); öyleyse bu harfi ilk harfi büyük olacak şekilde görüntülemek için yazmanız gerekir.

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

Ve şimdi bitti.


1

StringTokenizer sınıfını kullanan örnek:

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

StringBuilder ile çözüm:

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

.. önceki cevaplara dayanarak


1

Her şeyi bir araya getirerek, ipin başında ekstra beyaz boşluk kesmek iyi bir fikirdir. Aksi takdirde, .substring (0,1) .toUpperCase bir boşluk bırakmaya çalışacaktır.

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

1

İşlevsel yaklaşımım. tüm paragrafta boşluktan sonra cümlenin ilk karakterini kapstilize eder.

Kapatilize etmek için kelimenin yalnızca ilk karakterini kaldırın .split ("")

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

1

Güncelleme Temmuz 2019

Şu anda, bunu yapmak için en güncel kütüphane işlevi org.apache.commons.lang3.StringUtils

import org.apache.commons.lang3.StringUtils;

StringUtils.capitalize(myString);

Maven kullanıyorsanız, pom.xml dosyanızdaki bağımlılığı içe aktarın:

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

1

"Basit" kod için bile kütüphaneleri kullanırdım. Mesele, kodun kendisi değil, istisnai vakaları kapsayan mevcut test senaryolarıdır. Bu olabilirnull , boş dizeler, diğer dillerde dizeler .

Kelime manipülasyon kısmı Apache Commons Lang'dan çıkarıldı. Şimdi Apache Commons Metnine yerleştirildi . Https://search.maven.org/artifact/org.apache.commons/commons-text aracılığıyla alın .

Apache Commons Metni'nden WordUtils.capitalize (String str) kullanabilirsiniz . İstediğinizden daha güçlü. Ayrıca dolgunluktan da büyük harflerle yararlanabilir (örn."oNe tousand only" . ).

Tam metin üzerinde çalıştığı için, sadece ilk kelimeyi büyük harfle yazmasını söylemelidir.

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

Tam JUnit sınıfı, işlevlerle oynatmayı etkinleştirmek için:

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

sadece ilk harfi büyük yapmak istiyorsanız aşağıdaki kod kullanılabilir

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

1

Aslında, +operatörden kaçınırsanız ve concat()bu durumda kullanırsanız en iyi performansı elde edersiniz . Sadece 2 dize birleştirmek için en iyi seçenektir (birçok dize için çok iyi değil). Bu durumda kod şöyle görünecektir:

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

0

Bunu kullan:

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

inputDize verildiğinde :

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

0

Aşağıdaki kodu deneyebilirsiniz:

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

Kabul edilen yanıta bir NULL kontrol ve IndexOutOfBoundsException eklemek istiyorum.

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

Java Kodu:

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

Çıktı:

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

Aşağıdakiler, inputString değerinizden bağımsız olarak size aynı tutarlı çıktıyı verecektir:

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

0

1. String'in substring()Yöntemini Kullanma

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

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

Şimdi capitalize(), bir dizenin ilk harfini büyük harfe dönüştürme yöntemini çağırmanız yeterlidir:

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

2. Apache Commons Lang

StringUtilsCommons Lang sınıfı sağlar capitalize(), aynı zamanda bu amaç için kullanılabilen usul:

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

pom.xmlDosyanıza aşağıdaki bağımlılığı ekleyin (yalnızca Maven için):

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

İşte bu iki yaklaşımı ayrıntılı olarak açıklayan bir makale .


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