2013-06-10 20 views
23

A partire da ora sto usando questo codice per fare la mia prima lettera di un capitale stringa diFai String prima lettera maiuscola in java

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

Questo sembra molto sporco mi ..è Esiste un modo diretto o elegante ..

+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)? Cercare l'eleganza in Java è ... beh, ci sono ROI migliori. Le librerie di utilità esistono per una ragione. –

+0

Hai bisogno di considerare le impostazioni locali? Ogni locale ha regole diverse per cambiare il caso delle lettere. – erickson

+0

@erickson Nessuna necessità. L'inglese è abbastanza per me. –

risposta

27

si dovrebbe avere uno sguardo a StringUtils classe da Apache Commons Lang lib - ha metodo .capitalize()

Descrizione dal lib:

In maiuscolo una stringa che modifica la prima lettera in quella del titolo in base a Character.toTitleCase (char). Non sono state modificate altre lettere.

+6

Downvoters, si prega di commentare il motivo di downvote. – user

+0

Si noti che se si desidera utilizzare solo la maiuscola per la prima lettera (ad esempio per la formattazione di un nome), potrebbe essere necessario mettere in minuscolo l'intera stringa prima di eseguire la maiuscola se si sospetta che potrebbero esserci già dei limiti nella stringa. Da JavaDoc: StringUtils.capitalize ("cAt") = "CAt" –

+0

In maiuscolo capitalizza la prima lettera di ogni singola parola non solo la prima – FrankMonza

49

ne dite di questo:

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

Non riesco a pensare a qualcosa di più pulito senza l'utilizzo di librerie esterne, ma questo è sicuramente meglio di quello che hanno attualmente.

+2

Penso che Marco intendesse, che "" o null falliranno; StringUtils.capitalize non fallirà su questo. –

+2

@JoopEggen Questo ha esattamente lo stesso comportamento del codice originale dell'OP, mentre 'StringUtils.capitalize' no. – arshajii

+3

I votanti in down si prega di considerare di lasciare un commento. – 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

Se inserisco una stringa come '_123' (che inizia con uno spazio), lancia un' NullPointerException'. La tua risposta sembra anche essere un po 'complicata rispetto alle altre. – pzaenger

+0

beh, non solo, il mio programma dovrebbe anche lanciare NullPointerException se aggiungi uno spazio alla fine. Non ho fatto questi controlli, puoi usare regex se vuoi ...Ho appena dato uno scheletro su come questo possa essere implementato. – 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

Si prega di non pubblicare solo il codice che potrebbe essere incomprensibile per l'OP. Spiega la tua risposta passo dopo passo e dai consigli. – mastov

+0

Ora il mio codice mi sembra più bello :) Grazie per la risposta però. –

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

Supponendo che si può usare Java 8, qui è il modo funzionale che nessuno ha chiesto per ...

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

È elegante in cui il programma gestisce i casi stringa nulla e vuoti senza alcuna dichiarazione condizionale.

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

P.S = a è una stringa.