簡體   English   中英

Java:如何將字符串中每個單詞的第一個字符大寫,並正確大寫名稱

[英]Java: How to capitalize the first character of each word in a string, and correctly capitalize names

我正在尋找執行以下操作的 Java 方法:

  1. 每個單詞的字母大寫: "a great string" -> "A Great String"

  2. 名稱的撇號后字母大寫: "rick o'shea" -> "Rick O'Shea"

  3. 所有格添加的“s”不受影響: "a bug's life" -> "A Bug's Life"

我嘗試了諸如WordUtils.capitalize類的方法,但大多數都不能滿足 2,而其他的不能滿足 3。

有沒有一種可以同時滿足這三個方面的有效方法?

編輯:更多情況下撇號后的字母不應大寫

  • '二
  • 已經
  • '回覆

不過對於這個問題,我們可以專注於's

當您在庫中找不到它時,您可以編寫自己的方法。 這是使用正則表達式的解決方案:

String capitalize(String s) {
    Matcher m = Pattern.compile("(\\w)(\\w*)").matcher(s);
    s = m.replaceAll(mr -> mr.group(1).toUpperCase() + mr.group(2).toLowerCase());
    m = Pattern.compile("'\\w\\b").matcher(s);
    return m.replaceAll(mr -> mr.group(0).toLowerCase());
}

試試這個,我只拿了你提出的測試用例,所以你可能想添加進去:

public static void main(String[] args) {
    System.out.println(capitalize("a great string"));
    System.out.println(capitalize("rick o'shea"));
    System.out.println(capitalize("a bug's life"));
}
private static String capitalize(String str) {
    StringBuilder sb = new StringBuilder();
    for(String s : str.split(" ")) {
        if(Character.isLowerCase(s.charAt(0)))
            s = (char)(s.charAt(0)-32) + s.substring(1);
        int index = s.indexOf("'");
        if(index > -1 && (s.length() - index) > 2) {
            s = s.substring(0,index+1) + (char)(s.charAt(index+1)-32) + s.substring(index+2);
        }
        sb.append(s+" ");
    }
    String res = sb.toString();
    return res.substring(0, res.length()-1);
}

Output:

A Great String 
Rick O'Shea 
A Bug's Life 

如果有方法可以解決除 3 之外的所有問題,您可以使用它們並添加代碼來扭轉他們做錯的任何事情。 一旦大寫,我們只需替換“Bug'S Life”中的“'S”

請注意,如果您以所有格結尾,則需要在 String 的末尾臨時添加一個空格,您應該詢問語言 stackexchanges 盡管您是否可以用所有格結束文本:D

例如,簡單的方法是

String almost ="rick o'shea a bug's life".satisfy2(); 
//At this point you have "Rick O'Shea A Bug'S Life"
//Replacing possessive with small s (Notice the space here, so O'Shea won't be touched)
String finished = almost.replace("'S ","'s ");

如果有任何其他類似的情況,大多數應該能夠以同樣的方式解決,也應該保持你的代碼相當干凈

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM