2013-06-10 4 views
23

A partir de maintenant j'utilise ce code pour faire ma première lettre dans une capitale chaîneMarque Chaîne première lettre majuscule en java

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

Cela me semble très sale pour ..est-il un moyen direct ou élégant ..

+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)? La recherche de l'élégance en Java est ... eh bien, il y a de meilleurs ROI. Les bibliothèques de services existent pour une raison. –

+0

Avez-vous besoin de prendre en compte les paramètres régionaux? Chaque locale a des règles différentes pour changer le cas des lettres. – erickson

+0

@erickson Pas besoin. L'anglais me suffit. –

Répondre

27

Vous devriez jeter un oeil à StringUtils classe de Apache Commons Lang lib - il a méthode .capitalize()

description de la lib:

Met en majuscule une chaîne en changeant la première lettre en casse de titre selon Character.toTitleCase (char). Aucune autre lettre n'est modifiée.

+6

Downvoters, s'il vous plaît commenter la raison de downvote. – user

+0

Notez que si vous souhaitez uniquement mettre en majuscule la première lettre (par exemple, pour formater un nom), vous devrez peut-être mettre en minuscule la chaîne entière avant de la mettre en majuscule si vous pensez que votre chaîne contient déjà des majuscules. De la JavaDoc: StringUtils.capitalize ("cAt") = "CAt" –

+0

Capitalize va mettre en majuscule la première lettre de chaque mot et pas seulement la première – FrankMonza

49

Que diriez-vous ceci:

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

Je ne peux pas penser à quoi que ce soit plus propre, sans utiliser des bibliothèques externes, mais cela est certainement mieux que ce que vous avez actuellement.

+2

Je pense que Marco voulait dire que "" ou null échouerait; StringUtils.capitalize n'échouera pas là-dessus. –

+2

@JoopEggen Ceci a exactement le même comportement que le code original de l'OP, alors que 'StringUtils.capitalize' ne l'est pas. – arshajii

+3

Votants en baisse s'il vous plaît envisager de laisser un commentaire. – 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

Si j'entre une chaîne comme '_123' (en commençant par un espace), il lance un' NullPointerException'. Votre réponse semble aussi être un peu compliquée par rapport aux autres. – pzaenger

+0

Eh bien, non seulement cela, mon programme devrait également lancer NullPointerException si vous ajoutez un espace à la fin. Je n'ai pas fait ces vérifications, vous pouvez utiliser regex si vous voulez ...Je viens de donner un squelette de la façon dont cela peut être mis en œuvre. – 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

Veuillez ne pas poster juste un code qui pourrait être incompréhensible à l'OP. Expliquez votre réponse étape par étape et donnez des conseils. – mastov

+0

Mon code me semble plus beau maintenant :) Merci pour la réponse si. –

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

En supposant que vous pouvez utiliser Java 8, voici la façon fonctionnelle que personne n'a demandé ...

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

Il est élégant qu'il gère les cas de chaîne vide et vide sans aucune condition.

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

P.S = a est une chaîne.

Questions connexes