2013-06-10 17 views
23

Jak na razie używam tego kodu, aby mój pierwszy list w kapitale strunProducent kapitał String pierwsza litera w java

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

To wydaje mi się bardzo brudny ..is istnieje bezpośredni lub elegancki sposób ..

+4

[StringUtils.capitalize()] (http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#capitalize%28java.lang .String% 29)? Poszukiwanie elegancji w Javie jest ... cóż, są lepsze zwroty z inwestycji. Biblioteki użytkowe istnieją z jakiegoś powodu. –

+0

Czy musisz wziąć pod uwagę lokalizację? Każde ustawienie narodowe ma inne reguły dotyczące zmiany wielkości liter. – erickson

+0

@erickson Nie ma potrzeby. Angielski jest dla mnie wystarczający. –

Odpowiedz

27

Trzeba spojrzeć na StringUtils klasy z Apache Commons Lang lib - ma metoda .capitalize()

Opis lib:

Zamienia na wielką literę ciąg znaków zmieniający pierwszą literę na literę tytułu zgodnie z Character.toTitleCase (char). Żadne inne litery nie są zmieniane.

+6

Downvoters, proszę skomentuj powód downwingu. – user

+0

Należy pamiętać, że jeśli chcesz zamapować tylko pierwszą literę (np. W celu sformatowania nazwy), konieczne może być napisanie małymi literami całego ciągu znaków przed uruchomieniem wielkich liter, jeśli podejrzewasz, że w ciągu znaków już występują ograniczenia. Z JavaDoc: StringUtils.capitalize ("cAt") = "CAt" –

+0

Capitalize będzie wielką literą pierwszego słowa każdego pojedynczego słowa, nie tylko pierwszego – FrankMonza

49

Jak o tym:

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

nie mogę myśleć o niczym filtra bez użycia zewnętrznych bibliotek, ale jest to zdecydowanie lepsze niż to, co masz obecnie.

+2

Myślę, że Marco miał na myśli, że "" lub zerowa zawiedzie; StringUtils.capitalize nie zawodzi. –

+2

@JoopEggen To ma dokładnie takie samo zachowanie jak oryginalny kod OP, natomiast 'StringUtils.capitalize' nie. – arshajii

+3

Down-głosujący rozważ proszę zostawić komentarz. – arshajii

0
public static void main(String[] args) { 
    String str = null; 
    String outStr = null; 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter a String: "); 
    str = sc.nextLine(); 
    //c= Character.toUpperCase(str.charAt(0)); 

    for(int i=0; i< (str.length());i++){ 

     if(str.charAt(i)==' '){ 

      outStr= outStr.substring(0,i+1)+str.substring(i+1,i+2).toUpperCase()+str.substring(i+2); 

     }else if(i==0){ 

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

     } 
    } 
    System.out.println("STRING::"+outStr); 
} 
+0

Jeśli wprowadzę ciąg znaków typu "_123" (zaczynając od spacji), zostanie zgłoszony wyjątek "NullPointerException". Twoja odpowiedź wydaje się być nieco bardziej skomplikowana w porównaniu do innych. – pzaenger

+0

Cóż, nie tylko to, mój program powinien również rzucić NullPointerException, jeśli dodasz spację na końcu. Nie zrobiłem tych czeków, możesz użyć wyrażenia regularnego, jeśli chcesz ...Właśnie podałem szkielet tego, jak można to zaimplementować. – Anubhav

-1
class strDemo3 
{ 
    public static void main(String args[]) 
    { 
     String s1=new String(" the ghost of the arabean sea"); 
     char c1[]=new char[30];  
     int c2[]=new int[30]; 
     s1.getChars(0,28,c1,0); 
     for(int i=0;i<s1.length();i++) 
     { 
      System.out.print(c1[i]); 
     } 
     for(int i=1;i<s1.length();i++) 
     { 
      c2[i]=c1[i]; 
      if(c1[i-1]==' ') 
      { 
       c2[i]=c2[i]-32; 
      } 
      c1[i]=(char)c2[i];   
     } 
     for(int i=0;i<s1.length();i++) 
     { 
      System.out.print(c1[i]); 
     }    
     } 
} 
+1

Proszę nie umieszczać kodu, który może być niezrozumiały dla PO. Wyjaśnij swoją odpowiedź krok po kroku i udziel porad. – mastov

+0

Mój kod wygląda teraz piękniej :) Dziękuję za odpowiedź. –

2
String out = Character.toUpperCase(inText.charAt(0)) + inText.substring(1).toLowerCase(); 
0

Zakładając można użyć Java 8, oto sposób funkcjonalny, że nikt nie poprosił o ...

import java.util.Optional; 
import java.util.stream.IntStream; 

public class StringHelper { 
    public static String capitalize(String source) { 
     return Optional.ofNullable(source) 
      .map(str -> IntStream.concat(
       str.codePoints().limit(1).map(Character::toUpperCase), 
       str.codePoints().skip(1))) 
      .map(stream -> stream.toArray()) 
      .map(arr -> new String(arr, 0, arr.length)) 
      .orElse(null); 
    } 
} 

Jest to elegancki, że obsługuje NULL i pustych przypadków ciągów bez żadnych instrukcji warunkowych.

0
Character.toString(a.charAt(0)).toUpperCase()+a.substring(1) 

P.S = a jest łańcuchem.

Powiązane problemy