2013-06-10 161 views
23

Tính đến bây giờ tôi đang sử dụng mã này để làm cho chữ cái đầu tiên của tôi trong một vốn chuỗiMake vốn Chuỗi chữ cái đầu tiên trong java

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

Điều này có vẻ rất bẩn với tôi ..is Có cách nào trực tiếp hoặc thanh lịch ..

+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)? Tìm kiếm sự sang trọng trong Java là ... tốt, có ROIs tốt hơn. Thư viện tiện ích tồn tại vì một lý do. –

+0

Bạn có cần xem xét ngôn ngữ? Mỗi miền địa phương có các quy tắc khác nhau để thay đổi trường hợp chữ cái. – erickson

+0

@erickson Không cần. Anh ngữ là đủ cho tôi. –

Trả lời

27

Bạn nên có một cái nhìn tại StringUtils lớp từ Apache Commons Lang lib - nó có phương pháp .capitalize()

Mô tả từ lib:

Viết hoa chuỗi thay đổi chữ cái đầu tiên thành chữ hoa tiêu đề theo Character.toTitleCase (char). Không có chữ cái nào khác được thay đổi.

+6

Downvoters, xin vui lòng bình luận lý do của downvote. – user

+0

Lưu ý rằng nếu bạn chỉ muốn viết hoa chữ cái đầu tiên (ví dụ: để định dạng tên), bạn có thể cần phải viết thường toàn bộ chuỗi trước khi chạy viết hoa nếu bạn nghi ngờ có thể có mũ trong chuỗi của bạn. Từ JavaDoc: StringUtils.capitalize ("cAt") = "CAt" –

+0

Viết hoa sẽ viết hoa chữ cái đầu tiên của mỗi từ không chỉ là số – FrankMonza

49

Làm thế nào về điều này:

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

Tôi không thể nghĩ ra bất cứ điều gì sạch hơn mà không sử dụng thư viện bên ngoài, nhưng điều này chắc chắn là tốt hơn so với những gì bạn đang có.

+2

đầu tiên. Tôi nghĩ Marco có nghĩa là "" hoặc null sẽ thất bại; StringUtils.capitalize sẽ không thất bại trên đó. –

+2

@JoopEggen Điều này có cùng một hành vi giống như mã ban đầu của OP, trong khi 'StringUtils.capitalize' thì không. – arshajii

+3

Cử tri bỏ phiếu, xin vui lòng xem xét để lại một bình luận. – 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

Nếu tôi nhập một chuỗi như '_123' (bắt đầu với một không gian), nó ném một' NullPointerException'. Câu trả lời của bạn có vẻ hơi phức tạp so với những người khác. – pzaenger

+0

tốt, không chỉ vậy, chương trình của tôi cũng nên ném NullPointerException nếu bạn thêm một không gian ở cuối. Tôi đã không thực hiện kiểm tra, bạn có thể sử dụng regex nếu bạn muốn ...Tôi chỉ đưa ra một bộ xương về cách thực hiện điều này. – 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

Vui lòng không chỉ đăng mã có thể không thể hiểu được đối với OP. Giải thích từng bước câu trả lời của bạn và đưa ra lời khuyên. – mastov

+0

Mã của tôi trông đẹp hơn với tôi bây giờ :) Cảm ơn câu trả lời mặc dù. –

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

Giả sử bạn có thể sử dụng Java 8, đây là cách chức năng mà không ai hỏi ...

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

Đó là tao nhã ở chỗ nó xử lý các trường hợp chuỗi rỗng và trống rỗng mà không có bất kỳ câu lệnh có điều kiện nào.

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

P.S = a string.