2009-07-19 83 views

Trả lời

124

Có một cái nhìn tại ACL WordUtils.

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

@kd tôi đã thử http://www.google.at/search?q=java+word+uppercase thxn anyway – Chris

+1

WordUtils.capitalize ("chuỗi của bạn") sẽ là "Chuỗi của bạn" –

44

tôi không biết nếu có một chức năng nhưng điều này sẽ thực hiện công việc trong trường hợp không có exsiting một:

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

tốt, nhưng từ [i] .substring (1) sẽ không hoạt động đối với các từ đơn lẻ như "a". Cần phải kiểm tra chiều dài đầu tiên. – cgTag

4

Bạn cũng có thể xem thư viện StringUtils. Nó có rất nhiều thứ tuyệt vời.

+0

Bạn có hiểu câu hỏi này không? Bạn đã kiểm tra câu trả lời được chấp nhận chưa? Bạn đã xác minh liên kết trước khi đăng? Bạn đã kiểm tra ngày của chủ đề chưa? – BalusC

+1

+1 cho StringUtils, nhưng vui lòng cập nhật liên kết của bạn :) – 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 - Chuỗi nối thêm vào một vòng lặp! Sử dụng StringBuilder, làm ơn. –

+0

String 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

Dưới đây là một rất đơn giản, giải pháp nhỏ gọn. str chứa biến của bất cứ điều gì bạn muốn làm trường hợp trên.

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

Tốt nhất là làm việc với StringBuilder vì Chuỗi không thay đổi và không hiệu quả khi tạo chuỗi mới cho mỗi từ.

+0

làm thế nào về một biến bên trong một vòng lặp, tôi có phải sử dụng StringBuffer không? eventough mỗi lần vòng lặp lặp lại giá trị biến thay đổi ?? Chúa ơi. @binkdm – gumuruh

66

Đây là mã

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

bạn havent hiểu câu hỏi, bạn chỉ viết hoa chữ cái đầu tiên của từ đầu tiên (!). có một vài từ trong một chuỗi và bạn phải viết hoa chữ cái đầu tiên của mỗi từ. – Chris

+4

+1 Tôi thích điều này, cách đơn giản nhất. Nhưng nó cần phải được đặt trong một vòng lặp mặc dù, để đáp ứng nhu cầu của câu hỏi – 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

Đang cố gắng để có nhiều bộ nhớ hiệu quả hơn so với việc tách chuỗi thành nhiều chuỗi, và sử dụng chiến lược thể hiện bởi Darshana Sri Lanka. Ngoài ra, xử lý tất cả khoảng trắng giữa các từ, không chỉ ký tự "".

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

Cũng lưu ý rằng trong một chế độ xem EditText, bạn có thể chỉ định android: inputType = "textCapWords" sẽ tự động viết hoa chữ cái đầu tiên của mỗi từ. Lưu gọi phương thức này. – user877139

+0

Điều này đã trở thành công việc hoàn hảo cho tôi. Cảm ơn các giải pháp. Tôi nghĩ rằng bây giờ chúng ta đều biết EditText có thể tận dụng các từ nhưng tôi cần một giải pháp mà đầu vào không đi vào EditText. –

+0

Sử dụng android: inputType = "textCapWords" chỉ thay đổi trạng thái mũ ban đầu của bàn phím, nếu người dùng nhấn lại thì vẫn có thể nhập chữ cái thường, vì vậy nếu cần ủy quyền mũ ban đầu, bạn cần phải thực hiện quá trình gửi trước . – 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); 
    } 
} 

Output:

This Is First WORD Capital thử nghiệm.

Đây là bài kiểm tra vốn từ đầu tiên.

+0

// One ligne convertion Chuỗi sss = "Salem đây là tôi"; Chuỗi str = sss.replaceFirst (String.valueOf (sss.charAt (0)), String.valueOf ((char) (sss.charAt (0) -32))); // CapitalizeFirstLetterInString System.out.println (str); –

2

Dưới đây là một giải pháp dễ dàng:

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 = ...' trong vòng lặp for cần dấu cộng: 'wordCapital + = ...' nếu không bạn chỉ nhận được từ cuối cùng. Xem kết quả: https://ideone.com/fHCE6E – Tom

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

Vì vậy, đơn giản hơn nhiều với regexes:

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

Output cho đầu vào: "câu này Có mũ Weird"

Câu này Có mũ lạ

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

Mã của tôi sau khi đọc một vài câu trả lời ở trên.

/** 
* 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(); 
} 
Các vấn đề liên quan