簡體   English   中英

如何將java中字符串中每個單詞的第一個和最后一個字母大寫

[英]How to capitalize the first and last letters of every word in a string in java

如何大寫字符串中每個單詞的第一個和最后一個字母

我這樣做了 -

    String cap = "";
    for (int i = 0; i < sent.length() - 1; i++)
    {
        if (sent.charAt(i + 1) == ' ')
        {
            cap += Character.toUpperCase(sent.charAt(i)) + " " + Character.toUpperCase(sent.charAt(i + 2));
            i += 2;
        }
        else
            cap += sent.charAt(i);
    }
    cap += Character.toUpperCase(sent.charAt(sent.length() - 1));
    System.out.print (cap);

當第一個單詞超過單個字符時,它不起作用

請使用簡單的功能,因為我是初學者

使用apache commons lang變得非常容易:

    String testString = "this string is needed to be 1st and 2nd letter-uppercased for each word";

    testString = WordUtils.capitalize(testString);
    testString = StringUtils.reverse(testString);
    testString = WordUtils.capitalize(testString);
    testString = StringUtils.reverse(testString);
    System.out.println(testString);

ThiS StrinG需要1sT和2nD字母 - 大寫字母EHH WorD

您應該使用空格作為字符分隔符來拆分String,然后對於每個標記,在第一個和最后一個字符上應用toUpperCase()並創建一個新的String作為結果。

很簡單的樣品:

  String cap = "";
  String sent = "hello  world. again.";

  String[] token = sent.split("\\s+|\\.$");

  for (String currentToken : token){
      String firstChar = String.valueOf(Character.toUpperCase(currentToken.charAt(0)));
      String between = currentToken.substring(1, currentToken.length()-1);
      String LastChar = String.valueOf(Character.toUpperCase(currentToken.charAt(currentToken.length()-1)));
      if (!cap.equals("")){
        cap += " ";
      }
      cap += firstChar+between+LastChar; 
  }

當然,在執行多個連接時,您應該支持在String上使用StringBuilder。

輸出結果: HellO World. AgaiN HellO World. AgaiN

你的代碼遺漏了第一個單詞的第一個字母。 我會把這視為特例,即

cap = ""+Character.toUpperCase(sent.charAt(0));
for (int i = 1; i < sent.length() - 1; i++)
{
.....

當然,有更簡單的方法來做你正在做的事情。

基本上,如果滿足下列條件之一,您只需迭代所有字符並替換它們:

  • 這是第一個角色
  • 這是最后一個角色
  • 前一個字符是一個空格(或任何你想要的,例如標點符號 - 見下文)
  • 下一個字符是空格(或任何你想要的,例如標點符號 - 見下文)

如果你出於性能和內存的原因使用StringBuilder (不要在+=會做的每次迭代中創建一個String ),它可能如下所示:

StringBuilder sb = new StringBuilder( "some words    in a list   even with    longer    whitespace in between" );
for( int i = 0; i < sb.length(); i++ ) {
  if( i == 0 || //rule 1
      i == (sb.length() - 1 ) || //rule 2
      Character.isWhitespace( sb.charAt( i - 1 ) ) || //rule 3
      Character.isWhitespace( sb.charAt( i + 1 ) ) ) { //rule 4
    sb.setCharAt( i, Character.toUpperCase( sb.charAt( i ) ) );
  }
}

結果: SomE WordS IN A LisT EveN WitH LongeR WhitespacE IN BetweeN

如果您還想檢查其他規則(例如標點符號等),您可以創建一個方法,您可以調用上一個和下一個字符,並檢查所需的屬性。

String stringToSearch = "this string is needed to be first and last letter uppercased for each word";

    // First letter upper case using regex
Pattern firstLetterPtn = Pattern.compile("(\\b[a-z]{1})+");
Matcher m = firstLetterPtn.matcher(stringToSearch);
StringBuffer sb = new StringBuffer();
while(m.find()){
    m.appendReplacement(sb,m.group().toUpperCase()); 
}
m.appendTail(sb);
stringToSearch = sb.toString();
sb.setLength(0);

    // Last letter upper case using regex
Pattern LastLetterPtn = Pattern.compile("([a-z]{1}\\b)+");
m = LastLetterPtn.matcher(stringToSearch);
while(m.find()){
    m.appendReplacement(sb,m.group().toUpperCase()); 
}
m.appendTail(sb);
System.out.println(sb.toString());

output:

ThiS StrinG IS NeedeD TO BE FirsT AnD LasT LetteR UppercaseD FoR EacH WorD

暫無
暫無

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

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