Làm cách nào để viết hoa chữ cái đầu tiên của Chuỗi trong Java?


305

Tôi đang sử dụng Java để nhận Stringđầu vào từ người dùng. Tôi đang cố gắng làm cho chữ cái đầu tiên của chữ viết hoa này được viết hoa.

Tôi đã thử điều này:

String name;

BufferedReader br = new InputStreamReader(System.in);

String s1 = name.charAt(0).toUppercase());

System.out.println(s1 + name.substring(1));

dẫn đến các lỗi biên dịch:

  • Nhập không khớp: không thể chuyển đổi từ InputStreamReader sang BufferedReader

  • Không thể gọi toUppercase () trên kiểu char nguyên thủy


2
@Pontus - Tôi không đồng ý. Đối với đầu vào "abcd", OP muốn đầu ra "Abcd". Có vẻ như khá rõ ràng, mặc dù câu hỏi có thể tốt hơn.
Kobi


ký tự là một kiểu dữ liệu nguyên thủy trong Java. Bạn không thể hủy bỏ kiểu dữ liệu nguyên thủy với toán tử dấu chấm (.). Bạn phải xâu chuỗi ký tự đầu tiên theo name.sub chuỗi (0,1);
Divakar Rajesh

Câu trả lời:


397
String str = "java";
String cap = str.substring(0, 1).toUpperCase() + str.substring(1);
// cap = "Java"

Với ví dụ của bạn:

public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    // Actually use the Reader
    String name = br.readLine();
    // Don't mistake String object with a Character object
    String s1 = name.substring(0, 1).toUpperCase();
    String nameCapitalized = s1 + name.substring(1);
    System.out.println(nameCapitalized);
}

1
Tôi nghĩ bạn cần -1 sau str.length (), nếu không bạn sẽ vượt ra khỏi giới hạn.
dutt

@dutt: Không thực sự, điều đó cũng hoàn toàn tốt. Nhưng sửa đổi của Rekin làm cho nó hoàn hảo. ;)
Adeel Ansari

commons lang luôn tốt hơn viết chức năng của riêng bạn trừ những trường hợp hiếm hoi mà bạn biết rõ hơn. Nếu bạn không đọc tài liệu chung của java về chức năng viết hoa, bạn không nên tự viết.
The.Laughing.Man

211

Tôi đã sử dụng WordUtils, nó cũng có chức năng tương tự nhưng nó viết hoa các chữ cái đầu tiên của tất cả các từ trong câu.
Surbhit Rao

StringUtils.capitalize( "fred from jupiter" );sản xuất "Fred from jupiter". Dễ ...: D
udoline

WordUtils.capitalizeFully () làm việc cho tôi như sự quyến rũ vì nó mang lại: WordUtils.capitalizeFully ("i am FINE") = "I Am Fine"
Atul Sharma

91

Mã phiên bản ngắn hơn / nhanh hơn để viết hoa chữ cái đầu tiên của Chuỗi là:

String name  = "stackoverflow"; 
name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();

giá trị của name"Stackoverflow"


4
Tôi thích giải pháp này vì nó đảm bảo phần còn lại của chuỗi là chữ thường. Đó là những gì tôi cần khi chuyển đổi từ tên enum của ALL_CAPS.
Ellen Spertus

54

Sử dụng thư viện chung của Apache. Giải phóng bộ não của bạn khỏi những thứ này và tránh Null Pulum & Index Out Of Bound Exceptions

Bước 1:

Nhập thư viện lang chung của apache bằng cách đặt thư mục này vào phần build.gradlephụ thuộc

compile 'org.apache.commons:commons-lang3:3.6'

Bước 2:

Nếu bạn chắc chắn rằng chuỗi của bạn là tất cả chữ thường hoặc tất cả những gì bạn cần là khởi tạo chữ cái đầu tiên, hãy gọi trực tiếp

StringUtils.capitalize(yourString);

Nếu bạn muốn đảm bảo rằng chỉ chữ cái đầu tiên được viết hoa, như làm điều này cho một enum, hãy gọi toLowerCase()trước và ghi nhớ rằng nó sẽ ném NullPointerExceptionnếu chuỗi đầu vào là null.

StringUtils.capitalize(YourEnum.STUFF.name().toLowerCase());
StringUtils.capitalize(yourString.toLowerCase());

Dưới đây là nhiều mẫu được cung cấp bởi apache. nó là ngoại lệ miễn phí

StringUtils.capitalize(null)  = null
StringUtils.capitalize("")    = ""
StringUtils.capitalize("cat") = "Cat"
StringUtils.capitalize("cAt") = "CAt"
StringUtils.capitalize("'cat'") = "'cat'"

Ghi chú:

WordUtilscũng được bao gồm trong thư viện này, nhưng không được dùng nữa. Xin đừng sử dụng nó.


2
Cảm ơn. Tôi không thể tin rằng mọi người thậm chí nghĩ đến việc sử dụng vòng lặp for cho loại nhiệm vụ này
Alvaro

@Alvaro, vào cuối ngày - mọi người sử dụng vòng lặp cho tác vụ này, kiểm tra mã nguồn apache. Điều này không có nghĩa là mọi người không nên sử dụng các giải pháp được thử nghiệm tốt.
Yuriy Chernyshov

@YuriyChernyshov chắc chắn, ý tôi là họ không nên phát minh lại bánh xe cho mã sản xuất cho hầu hết các phần
Alvaro

WordUtils.capitalizeFully () làm việc cho tôi như sự quyến rũ vì nó mang lại: WordUtils.capitalizeFully ("i am FINE") = "I Am Fine"
Atul Sharma

Tôi sẽ không bao giờ đi cho các thư viện bên ngoài chỉ với mục đích nhỏ như How to capitalize the first letter of a String in Java?.
Stack Overflow

25

Java:

chỉ đơn giản là một phương thức trợ giúp để viết hoa mỗi chuỗi.

public static String capitalize(String str)
{
    if(str == null) return str;
    return str.substring(0, 1).toUpperCase() + str.substring(1);
}

Sau đó chỉ cần gọi str = capitalize(str)


Kotlin:

str.capitalize()

Nó sẽ ném một ngoại lệ nếu strlà null. Kiểm tra chuỗi không phải là null và có ít nhất một ký tự trước khi sử dụng.
attacomsian

@attacomsian bạn nói đúng, tôi cập nhật mã java và đối với Kotlin bạn có thể sử dụng str? .capitalize ()
Amir Hossein Ghasemi

22

Những gì bạn muốn làm có lẽ là thế này:

s1 = name.substring(0, 1).toUpperCase() + name.substring(1);

(chuyển đổi char đầu tiên thành chữ hoa và thêm phần còn lại của chuỗi gốc)

Ngoài ra, bạn tạo một trình đọc luồng đầu vào, nhưng không bao giờ đọc bất kỳ dòng nào. Như vậyname sẽ luôn lànull .

Điều này sẽ làm việc:

BufferedReader br = new InputstreamReader(System.in);
String name = br.readLine();
String s1 = name.substring(0, 1).toUpperCase() + name.substring(1);

16

Chào! Bạn có thể vui lòng giải thích làm thế nào để thực hiện điều này trong dự án của tôi? Tôi có thể thấy bất kỳ liên kết tải xuống tập tin trong URL của bạn. Cảm ơn
GrayFox

Phương pháp này không được chấp nhận. Vui lòng sử dụng StringUtils từ commons-lang
Fangming

12

Giải pháp dưới đây sẽ làm việc.

String A = "stackOverflow";
String ACaps = A.toUpperCase().charAt(0)+A.substring(1,A.length());
//Will print StackOverflow

Bạn không thể sử dụng toUpperCase () trên char nguyên thủy, nhưng trước tiên bạn có thể tạo toàn bộ Chuỗi thành Uppercase sau đó lấy char đầu tiên, sau đó nối vào chuỗi con như được hiển thị ở trên.


toUpperCase bị hạn chế trong câu hỏi.
Harpreet Sandhu - TheRootCoder

Trong câu hỏi, anh ta đã cố gắng đểUpperCase trên nguyên thủy sẽ không hoạt động.
Jijil Kakkadathu

1
Oh. Tôi đã bỏ lỡ điều đó. (y)
Harpreet Sandhu - TheRootCoder

1
câu trả lời tuyệt vời thân yêu
Dulaj Kulathunga


7

Ngắn nhất quá:

String message = "my message";    
message = Character.toUpperCase(message.charAt(0)) + message.substring(1);
System.out.println(message)    // Will output: My message

Đã làm cho tôi.


6

Đặt chuỗi thành chữ thường, sau đó đặt Chữ cái đầu tiên thành chữ hoa như sau:

    userName = userName.toLowerCase();

sau đó viết hoa chữ cái đầu tiên:

    userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase();

chuỗi con chỉ là lấy một đoạn của chuỗi lớn hơn, sau đó chúng ta sẽ kết hợp chúng lại với nhau.


7
Làm thế nào tôi có được nó, dòng mã đầu tiên, là vô ích, vì phần còn lại của chuỗi được đặt thành chữ thường.
Håvard Nygård

6

Những gì về WordUtils.capitalizeFully () ?

import org.apache.commons.lang3.text.WordUtils;

public class Main {

    public static void main(String[] args) {

        final String str1 = "HELLO WORLD";
        System.out.println(capitalizeFirstLetter(str1)); // output: Hello World

        final String str2 = "Hello WORLD";
        System.out.println(capitalizeFirstLetter(str2)); // output: Hello World

        final String str3 = "hello world";
        System.out.println(capitalizeFirstLetter(str3)); // output: Hello World

        final String str4 = "heLLo wORld";
        System.out.println(capitalizeFirstLetter(str4)); // output: Hello World
    }

    private static String capitalizeFirstLetter(String str) {
        return WordUtils.capitalizeFully(str);
    }
}

6

Sử dụng phương pháp tiện ích này để có được tất cả chữ cái đầu tiên trong vốn.

String captializeAllFirstLetter(String name) 
{
    char[] array = name.toCharArray();
    array[0] = Character.toUpperCase(array[0]);

    for (int i = 1; i < array.length; i++) {
        if (Character.isWhitespace(array[i - 1])) {
            array[i] = Character.toUpperCase(array[i]);
        }
    }

    return new String(array);
}


4

Bạn cũng có thể thử điều này:

 String s1 = br.readLine();
 char[] chars = s1.toCharArray();
 chars[0] = Character.toUpperCase(chars[0]);
 s1= new String(chars);
 System.out.println(s1);

Điều này tốt hơn (tối ưu hóa) so với sử dụng chuỗi con. (nhưng không phải lo lắng về chuỗi nhỏ)


4

Bạn có thể sử dụng substring()để làm điều này.

Nhưng có hai trường hợp khác nhau:

Trường hợp 1

Nếu Stringchữ viết hoa của bạn có nghĩa là có thể đọc được, bạn cũng nên chỉ định ngôn ngữ mặc định:

String firstLetterCapitalized = 
    myString.substring(0, 1).toUpperCase(Locale.getDefault()) + myString.substring(1);

Trường hợp 2

Nếu Stringchữ viết hoa của bạn có nghĩa là có thể đọc được bằng máy, hãy tránh sử dụng Locale.getDefault()vì chuỗi được trả về sẽ không nhất quán giữa các vùng khác nhau và trong trường hợp này luôn chỉ định cùng một miền (ví dụ:toUpperCase(Locale.ENGLISH) :). Điều này sẽ đảm bảo rằng các chuỗi bạn đang sử dụng để xử lý nội bộ là nhất quán, điều này sẽ giúp bạn tránh các lỗi khó tìm.

Lưu ý: Bạn không cần phải xác định Locale.getDefault()cho toLowerCase(), vì điều này được thực hiện tự động.


4

Trong Studio Android

Thêm phụ thuộc này vào của bạn build.gradle (Module: app)

dependencies {
    ...
    compile 'org.apache.commons:commons-lang3:3.1'
    ...
}

Bây giờ bạn có thể sử dụng

String string = "STRING WITH ALL CAPPS AND SPACES";

string = string.toLowerCase(); // Make all lowercase if you have caps

someTextView.setText(WordUtils.capitalize(string));


4

Nó sẽ làm việc 101%

public class UpperCase {

    public static void main(String [] args) {

        String name;

        System.out.print("INPUT: ");
        Scanner scan = new Scanner(System.in);
        name  = scan.next();

        String upperCase = name.substring(0, 1).toUpperCase() + name.substring(1);
        System.out.println("OUTPUT: " + upperCase); 

    }

}

3

Điều này chỉ để cho bạn thấy rằng bạn không sai.

BufferedReader br = new InputstreamReader(System.in);
// Assuming name is not blank
String name = br.readLine(); 

//No more error telling that you cant convert char to string
String s1 = (""+name.charAt(0)).toUppercase());
// Or, as Carlos prefers. See the comments to this post.
String s1 = Character.toString(name.charAt(0)).toUppercase());

System.out.println(s1+name.substring(1));

Lưu ý: Đây không phải là cách tốt nhất để làm điều đó. Đây chỉ là để cho OP thấy rằng nó cũng có thể được thực hiện bằng cách sử dụng charAt(). ;)


1
+1 cho "không sai". Tôi muốn Character.toString(name.charAt(0)) thay vì ""+name.charAt(0)cho thấy những gì tôi thực sự muốn làm.
dùng85421

Không có kiểm tra độ dài null .. Chiều dài có thể bằng không.
Chrispix

3

Điều này sẽ làm việc

char[] array = value.toCharArray();

array[0] = Character.toUpperCase(array[0]);

String result = new String(array);

3

Bạn có thể sử dụng mã sau đây:

public static void main(String[] args) {

    capitalizeFirstLetter("java");
    capitalizeFirstLetter("java developer");
}

public static void capitalizeFirstLetter(String text) {

    StringBuilder str = new StringBuilder();

    String[] tokens = text.split("\\s");// Can be space,comma or hyphen

    for (String token : tokens) {
        str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).append(" ");
    }
    str.toString().trim(); // Trim trailing space

    System.out.println(str);

}

3

thử cái này

Phương pháp này làm là gì, hãy xem xét từ "hello world" phương thức này biến nó thành "Hello World" viết hoa từ đầu của mỗi từ.

 private String capitalizer(String word){

        String[] words = word.split(" ");
        StringBuilder sb = new StringBuilder();
        if (words[0].length() > 0) {
            sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase());
            for (int i = 1; i < words.length; i++) {
                sb.append(" ");
                sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase());
            }
        }
        return  sb.toString();

    }

Nhưng mã này có vẻ khá dễ hiểu, Tất cả các phương pháp đều dễ hiểu bằng tên của họ. Nhưng cảm ơn vì nhận xét của bạn, sẽ cố gắng để hoàn thiện hơn từ lần sau, tôi sẽ quá lười biếng một thời gian :-).
Ameen Maheen

Hoạt động như một lá bùa!
TheVinceble

3

Đưa ra câu trả lời là viết hoa chữ cái đầu tiên của một từ duy nhất. sử dụng mã sau để viết hoa toàn bộ chuỗi.

public static void main(String[] args) {
    String str = "this is a random string";
    StringBuilder capitalizedString = new StringBuilder();
    String[] splited = str.trim().split("\\s+");

    for (String string : splited) {         
        String s1 = string.substring(0, 1).toUpperCase();
        String nameCapitalized = s1 + string.substring(1);

        capitalizedString.append(nameCapitalized);
        capitalizedString.append(" ");
    }
    System.out.println(capitalizedString.toString().trim());
}

đầu ra: This Is A Random String


3

Nếu Input là UpperCase, thì Sử dụng như sau:

str.sub chuỗi (0, 1) .toUpperCase () + str.sub chuỗi (1) .toLowerCase ();

Nếu Input là LowerCase, thì sử dụng như sau:

str.sub chuỗi (0, 1) .toUpperCase () + str.sub chuỗi (1);



2
public static String capitalizer(final String texto) {

    // split words
    String[] palavras = texto.split(" ");
    StringBuilder sb = new StringBuilder();

    // list of word exceptions
    List<String> excessoes = new ArrayList<String>(Arrays.asList("de", "da", "das", "do", "dos", "na", "nas", "no", "nos", "a", "e", "o", "em", "com"));

    for (String palavra : palavras) {

        if (excessoes.contains(palavra.toLowerCase()))
            sb.append(palavra.toLowerCase()).append(" ");
        else
            sb.append(Character.toUpperCase(palavra.charAt(0))).append(palavra.substring(1).toLowerCase()).append(" ");
    }
    return sb.toString().trim();
}

2

Bạn có thể sử dụng mã sau đây:

public static String capitalizeString(String string) {

    if (string == null || string.trim().isEmpty()) {
        return string;
    }
    char c[] = string.trim().toLowerCase().toCharArray();
    c[0] = Character.toUpperCase(c[0]);

    return new String(c);

}

thử nghiệm ví dụ với JUnit:

@Test
public void capitalizeStringUpperCaseTest() {

    String string = "HELLO WORLD  ";

    string = capitalizeString(string);

    assertThat(string, is("Hello world"));
}

@Test
public void capitalizeStringLowerCaseTest() {

    String string = "hello world  ";

    string = capitalizeString(string);

    assertThat(string, is("Hello world"));
}

2

Sử dụng commons.lang.StringUtilscâu trả lời tốt nhất là:

public static String capitalize(String str) {  
    int strLen;  
    return str != null && (strLen = str.length()) != 0 ? (new StringBuffer(strLen)).append(Character.toTitleCase(str.charAt(0))).append(str.substring(1)).toString() : str;  
}

Tôi thấy nó tuyệt vời vì nó kết thúc chuỗi bằng StringBuffer. Bạn có thể thao tác StringBuffer theo ý muốn và mặc dù sử dụng cùng một thể hiện.


2

Một ví dụ khác, làm thế nào bạn có thể làm cho chữ cái đầu tiên của đầu vào của người dùng được viết hoa:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String string = br.readLine();
// handle supplementary characters
IntStream.concat(
        IntStream.of(string.codePointAt(0))
                .map(Character::toUpperCase), string.codePoints().skip(1)
)
.forEach(cp -> System.out.print(Character.toChars(cp)));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.