2009-07-19 23 views

risposta

124

Dai un'occhiata alla ACL WordUtils.

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

@kd ho provato http://www.google.at/search?q=java+word+uppercase thxn in ogni caso – Chris

+1

WordUtils.capitalize ("la tua stringa") sarà "Your String" –

44

non so se v'è una funzione, ma questo sarebbe fare il lavoro nel caso in cui non v'è alcuna exsiting uno:

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

buono, ma le parole [i] .substring (1) non funzionano per le singole lettere come "a". Devi prima controllare la lunghezza. – cgTag

4

Inoltre è possibile dare un'occhiata alla libreria StringUtils. Ha un sacco di cose interessanti.

+0

Hai capito la domanda? Hai controllato la risposta accettata? Hai verificato il link prima di postare? Hai controllato la data dell'argomento? – BalusC

+1

+1 per StringUtils, ma per favore aggiorna il tuo link :) – 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 - String append in loop! Usa StringBuilder, per favore. –

+0

Stringa 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

Ecco un semplice, soluzione compatta. str contiene la variabile di qualunque cosa tu voglia fare in maiuscolo.

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

E 'meglio lavorare con StringBuilder perché String è immutabile ed è inefficiente per generare nuove stringhe per ogni parola.

+0

che ne dici di una variabile all'interno di un ciclo for, devo anche usare StringBuffer? eventough ogni volta che il loop ha iterato il valore variabile cambiato ?? Oh mio Dio. @binkdm – gumuruh

66

Ecco il codice

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

non hai capito la domanda, hai solo maiuscolo la prima lettera della prima (!) parola. ci sono diverse parole in una stringa e devi digitare maiuscolo la prima lettera di ogni parola. – Chris

+4

+1 Mi piace questo, il modo più semplice. Ma deve essere messo in un ciclo, per soddisfare le esigenze della domanda – 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

Cercando di essere più efficiente della memoria di dividere la stringa in più stringhe, e utilizzando la strategia mostrato da Darshana Sri Lanka. Inoltre, gestisce tutti gli spazi bianchi tra le parole, non solo il carattere "".

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

Si noti inoltre che in una vista EditText, è possibile specificare android: inputType = "textCapWords" che capitalizzerà automaticamente la prima lettera di ogni parola. Salva chiamando questo metodo. – user877139

+0

Questo ha funzionato perfettamente per me. Grazie per la soluzione. Penso che ormai tutti sappiamo che EditText può scrivere in maiuscolo ma ho bisogno di una soluzione in cui l'input non andasse in un EditText. –

+0

Usando android: inputType = "textCapWords" cambia lo stato del cap iniziale della tastiera, se l'utente preme indietro può ancora inserire una lettera minuscola, quindi se è necessario richiedere i cap iniziali devi eseguire l'elaborazione pre-invio . – 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); 
    } 
} 

uscita:

This Is prima parola Capitale test.

Questo è il primo test capitale di Word.

+0

// One ligne convertion String sss = "Salem this is me"; Stringa str = sss.replaceFirst (String.valueOf (sss.charAt (0)), String.valueOf ((char) (sss.charAt (0) -32))); // CapitalizeFirstLetterInString System.out.println (str); –

2

Ecco una soluzione facile:

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 = ...' nel ciclo for ha bisogno di un segno più: 'wordCapital + = ... 'altrimenti otterresti solo l'ultima parola. Vedere il risultato: https://ideone.com/fHCE6E – Tom

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

molto più semplice con espressioni regolari:

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

uscita per l'ingresso: "Questa frase è caps strano"

questa frase Has Weird Caps

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

Il mio codice dopo aver letto alcune risposte di cui sopra.

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