2009-07-19 10 views

Respuesta

124

Tenga una mirada en ACL WordUtils.

WordUtils.capitalize("your string") == "Your String" 
+0

@kd intenté http://www.google.at/search?q=java+word+uppercase thxn de todos modos – Chris

+1

WordUtils.capitalize ("su cadena") será "Su cadena" –

44

No sé si hay una función pero esto haría el trabajo en caso de que no existe una exsiting:

String s = "here are a bunch of words"; 

final StringBuilder result = new StringBuilder(s.length()); 
String[] words = s.split("\\s"); 
for(int i=0,l=words.length;i<l;++i) { 
    if(i>0) result.append(" ");  
    result.append(Character.toUpperCase(words[i].charAt(0))) 
     .append(words[i].substring(1)); 

} 
+1

buena, pero las palabras [i] .substring (1) no va a funcionar para las palabras de una sola letra como "a". Necesita verificar la longitud primero. – cgTag

4

También puede echar un vistazo a la biblioteca StringUtils. Tiene un montón de cosas interesantes.

+0

¿Entendió la pregunta? ¿Revisaste la respuesta aceptada? ¿Verificaste el enlace antes de publicarlo? ¿Revisaste la fecha del tema? – BalusC

+1

+1 para StringUtils, pero actualice su enlace :) – icl7126

1
public String UpperCaseWords(String line) 
{ 
    line = line.trim().toLowerCase(); 
    String data[] = line.split("\\s"); 
    line = ""; 
    for(int i =0;i< data.length;i++) 
    { 
     if(data[i].length()>1) 
      line = line + data[i].substring(0,1).toUpperCase()+data[i].substring(1)+" "; 
     else 
      line = line + data[i].toUpperCase(); 
    } 
    return line.trim(); 
} 
+0

Uhg - ¡La cadena se agrega en un bucle! Use StringBuilder, por favor. –

+0

Cadena new = old.substring (0, 1) .toUpperCase() + old.substring (1); –

2
import java.util.Scanner; 
public class CapitolizeOneString { 

    public static void main(String[] args) 
    { 
     Scanner scan = new Scanner(System.in); 
     System.out.print(" Please enter Your word  = "); 
     String str=scan.nextLine(); 

     printCapitalized(str); 
    } // end main() 

    static void printCapitalized(String str) { 
     // Print a copy of str to standard output, with the 
     // first letter of each word in upper case. 
     char ch;  // One of the characters in str. 
     char prevCh; // The character that comes before ch in the string. 
     int i;   // A position in str, from 0 to str.length()-1. 
     prevCh = '.'; // Prime the loop with any non-letter character. 
     for (i = 0; i < str.length(); i++) { 
      ch = str.charAt(i); 
      if (Character.isLetter(ch) && ! Character.isLetter(prevCh)) 
       System.out.print(Character.toUpperCase(ch)); 
      else 
       System.out.print(ch); 
      prevCh = ch; // prevCh for next iteration is ch. 
     } 
     System.out.println(); 
    } 
} // end class 
12

Aquí es una solución muy simple y compacto. str contiene la variable de lo que quieras que haga la mayúscula activada.

StringBuilder b = new StringBuilder(str); 
int i = 0; 
do { 
    b.replace(i, i + 1, b.substring(i,i + 1).toUpperCase()); 
    i = b.indexOf(" ", i) + 1; 
} while (i > 0 && i < b.length()); 

System.out.println(b.toString()); 

Es mejor trabajar con StringBuilder debido cadena es inmutable y es ineficaz para generar nuevas cadenas para cada palabra.

+0

¿Qué tal una variable dentro de un for-loop, tengo que usar también StringBuffer? A pesar de que cada vez que el ciclo iteraba cambiaba el valor de la variable? Dios mio. @binkdm – gumuruh

66

Este es el código

String source = "hello good old world"; 
    StringBuffer res = new StringBuffer(); 

    String[] strArr = source.split(" "); 
    for (String str : strArr) { 
     char[] stringArray = str.trim().toCharArray(); 
     stringArray[0] = Character.toUpperCase(stringArray[0]); 
     str = new String(stringArray); 

     res.append(str).append(" "); 
    } 

    System.out.print("Result: " + res.toString().trim()); 
+1

no has entendido la pregunta, solo mayúsculas la primera letra de la primera (!) palabra. hay varias palabras en una cadena y tienes que utilizar mayúscula la primera letra de cada palabra. – Chris

+4

+1 Me gusta esto, la forma más sencilla. Pero necesita ponerse en un bucle, para satisfacer las necesidades de la pregunta – GingerHead

2
public class WordChangeInCapital{ 

    public static void main(String[] args) 
    { 
     String s="this is string example"; 
     System.out.println(s); 
     //this is input data. 
     //this example for a string where each word must be started in capital letter 
     StringBuffer sb=new StringBuffer(s); 
     int i=0; 
     do{ 
     b.replace(i,i+1,sb.substring(i,i+1).toUpperCase()); 
     i=b.indexOf(" ",i)+1; 
     } while(i>0 && i<sb.length()); 
     System.out.println(sb.length()); 
    } 

} 
2
package com.raj.samplestring; 

/** 
* @author gnagara 
*/ 
public class SampleString { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     String[] stringArray; 
     String givenString = "ramu is Arr Good boy"; 

     stringArray = givenString.split(" "); 


     for(int i=0; i<stringArray.length;i++){ 
      if(!Character.isUpperCase(stringArray[i].charAt(0))){ 
       Character c = stringArray[i].charAt(0); 
       Character change = Character.toUpperCase(c); 

       StringBuffer ss = new StringBuffer(stringArray[i]); 
       ss.insert(0, change); 
       ss.deleteCharAt(1); 
       stringArray[i]= ss.toString(); 
      } 
     } 
     for(String e:stringArray){ 
      System.out.println(e); 
     } 
    } 
} 
10

Tratando de ser más eficiente de la memoria de dividir la cadena en varias cadenas, y el uso de la estrategia mostrada por Darshana Sri Lanka. Además, maneja todo el espacio en blanco entre las palabras, no solo el carácter "".

public static String UppercaseFirstLetters(String str) 
{ 
    boolean prevWasWhiteSp = true; 
    char[] chars = str.toCharArray(); 
    for (int i = 0; i < chars.length; i++) { 
     if (Character.isLetter(chars[i])) { 
      if (prevWasWhiteSp) { 
       chars[i] = Character.toUpperCase(chars[i]);  
      } 
      prevWasWhiteSp = false; 
     } else { 
      prevWasWhiteSp = Character.isWhitespace(chars[i]); 
     } 
    } 
    return new String(chars); 
} 
+0

También tenga en cuenta que en una vista de Editar texto, puede especificar android: inputType = "textCapWords" que automáticamente escribirá en mayúscula la primera letra de cada palabra. Guarda llamando a este método. – user877139

+0

Esto ha resultado perfecto para mí. Gracias por la solución. Creo que a estas alturas todos sabemos que EditText puede escribir en mayúsculas las palabras, pero necesitaba una solución en la que la entrada no entrara en un EditText. –

+0

Usando android: inputType = "textCapWords" solo cambia el estado de la tapa inicial del teclado, si el usuario presiona hacia atrás puede ingresar una letra minúscula, por lo que si es necesario ordenar tapas iniciales, deberá hacer el procesamiento previo a la presentación . – ZacWolf

19
import org.apache.commons.lang.WordUtils; 

public class CapitalizeFirstLetterInString { 
    public static void main(String[] args) { 
     // only the first letter of each word is capitalized. 
     String wordStr = WordUtils.capitalize("this is first WORD capital test."); 
     //Capitalize method capitalizes only first character of a String 
     System.out.println("wordStr= " + wordStr); 

     wordStr = WordUtils.capitalizeFully("this is first WORD capital test."); 
     // This method capitalizes first character of a String and make rest of the characters lowercase 
     System.out.println("wordStr = " + wordStr); 
    } 
} 

Salida:

Esta es la primera palabra de prueba de Capital.

This Is First Word Capital Test.

+0

// One ligne convertion Cadena sss = "Salem soy yo"; String str = sss.replaceFirst (String.valueOf (sss.charAt (0)), String.valueOf ((char) (sss.charAt (0) -32))); // CapitalizeFirstLetterInString System.out.println (str); –

2

Aquí es una solución fácil:

public class CapitalFirstLetters { 

public static void main(String[] args) { 
    String word = "it's java, baby!"; 
    String[] wordSplit; 
    String wordCapital = ""; 
    wordSplit = word.split(" "); 
    for (int i = 0; i < wordSplit.length; i++) { 
     wordCapital = wordSplit[i].substring(0, 1).toUpperCase() + wordSplit[i].substring(1) + " "; 
    } 
    System.out.println(wordCapital); 
}} 
+0

'wordCapital = ...' en el bucle for necesita un signo más: 'wordCapital + = ...' de lo contrario solo obtendría la última palabra. Ver el resultado: https://ideone.com/fHCE6E – Tom

50
sString = sString.toLowerCase(); 
sString = Character.toString(sString.charAt(0)).toUpperCase()+sString.substring(1); 
1

Tanto es más simple con expresiones regulares:

Pattern spaces=Pattern.compile("\\s+[a-z]");  
Matcher m=spaces.matcher(word);  
StringBuilder capitalWordBuilder=new StringBuilder(word.substring(0,1).toUpperCase()); 
int prevStart=1; 
     while(m.find()) { 
       capitalWordBuilder.append(word.substring(prevStart,m.end()-1)); 
       capitalWordBuilder.append(word.substring(m.end()-1,m.end()).toUpperCase()); 
       prevStart=m.end(); 
     } 
     capitalWordBuilder.append(word.substring(prevStart,word.length())); 

de salida para la entrada: "esta frase tiene casquetes raro"

Esta Sentencia Tiene tapas extrañas

7
String s = "java is an object oriented programming language.";  
    final StringBuilder result = new StringBuilder(s.length());  
    String words[] = s.split("\\ "); // space found then split it 
    for (int i = 0; i < words.length; i++) 
     { 
    if (i > 0){ 
    result.append(" "); 
    } 
    result.append(Character.toUpperCase(words[i].charAt(0))).append(
       words[i].substring(1)); 
    } 
    System.out.println(result); 
2

Mi código después de leer algunas de las respuestas anteriores.

/** 
* Returns the given underscored_word_group as a Human Readable Word Group. 
* (Underscores are replaced by spaces and capitalized following words.) 
* 
* @param pWord 
*   String to be made more readable 
* @return Human-readable string 
*/ 
public static String humanize2(String pWord) 
{ 
    StringBuilder sb = new StringBuilder(); 
    String[] words = pWord.replaceAll("_", " ").split("\\s"); 
    for (int i = 0; i < words.length; i++) 
    { 
     if (i > 0) 
      sb.append(" "); 
     if (words[i].length() > 0) 
     { 
      sb.append(Character.toUpperCase(words[i].charAt(0))); 
      if (words[i].length() > 1) 
      { 
       sb.append(words[i].substring(1)); 
      } 
     } 
    } 
    return sb.toString(); 
} 
Cuestiones relacionadas