簡體   English   中英

如何使用java將每個句子中的第一個字母大寫后?

[英]how to capitalize first letter after period in each sentence using java?

我目前正在學習如何操作字符串,我認為我需要一段時間才能習慣它。 我想知道如何在每個句子中經過一段時間后將一封信用於大寫。

輸出是這樣的:

輸入句子:我很開心。 這是天才。

資本化:我很高興。 這是天才。

我已經嘗試創建自己的代碼,但它不工作,隨時糾正和更改它。 這是我的代碼:

package Test;

import java.util.Scanner;

public class TestMain {
    public static void main(String[]args) {
        String sentence = getSentence();
        int position = sentence.indexOf(".");

        while (position != -1) {
            position = sentence.indexOf(".", position + 1);
            sentence = Character.toUpperCase(sentence.charAt(position)) + sentence.substring(position + 1);
            System.out.println("Capitalized: " + sentence);
        }

    }

    public static String getSentence() {
        Scanner hold = new Scanner(System.in);
        String sent;
        System.out.print("Enter sentences:");
        sent = hold.nextLine();
        return sent;
    }
}

棘手的部分是如何在句號之后(“。”)將一封信寫入資本? 我沒有很多字符串操作知識,所以我真的陷入了這個領域。

嘗試這個:

package Test;
import java.util.Scanner;

public class TestMain {
    public static void main(String[]args){

        String sentence = getSentence();
        StringBuilder result = new StringBuilder(sentence.length());
        //First one is capital!
        boolean capitalize = true;

        //Go through all the characters in the sentence.
        for(int i = 0; i < sentence.length(); i++) {
            //Get current char
            char c = sentence.charAt(i);

            //If it's period then set next one to capital
            if(c == '.') {
                capitalize = true;
            }
            //If it's alphabetic character...
            else if(capitalize && Character.isAlphabetic(c)) {
                //...we turn it to uppercase
                c = Character.toUpperCase(c);
                //Don't capitalize next characters
                capitalize = false;
            }

            //Accumulate in result
            result.append(c);
        }
        System.out.println(result);
    }

    public static String getSentence(){
        Scanner hold = new Scanner(System.in);
        String sent;
        System.out.print("Enter sentences:");
        sent = hold.nextLine();
        return sent;
    }
}

這是通過字符串中的所有字符順序前進並保持下一個字符需要大寫的狀態。

在此輸入圖像描述

按照評論進行更深入的解釋。

你可以實現一個狀態機:

狀態機

它從大寫狀態開始,當每個字符被讀取時它會發出它,然后決定下一個要進入的狀態。

由於只有兩種狀態,因此狀態可以存儲在布爾值中。

public static String capitalizeSentence(String sentence) {
    StringBuilder result = new StringBuilder();
    boolean capitalize = true; //state
    for(char c : sentence.toCharArray()) {    
        if (capitalize) {
           //this is the capitalize state
           result.append(Character.toUpperCase(c));
           if (!Character.isWhitespace(c) && c != '.') {
             capitalize = false; //change state
           }
        } else {
           //this is the don't capitalize state
           result.append(c);
           if (c == '.') {
             capitalize = true; //change state
           }
        }
    }
    return result.toString();
}
  1. 好像你的教授正在重復他的作業。 這已經被問到: 將一個句子中的第一個單詞用多個句子大寫

  2. 使用預先存在的lib: http//commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html#capitalize(java.lang.String,%20char。 ..)

和番石榴

    public static void main(String[] args) {
        String sentences = "i am happy. this is genius.";

        Iterable<String> strings = Splitter.on('.').split(sentences);

        List<String> capStrings = FluentIterable.from(strings)
                                  .transform(new Function<String, String>()
                                  {
                                    @Override
                                    public String apply(String input){
                                        return WordUtils.capitalize(input);
                                    }
                                 }).toList();

        System.out.println(Joiner.on('.').join(capStrings));
    }

您可以使用以下代碼將每個句子中的第一個字母大寫。

    String input = "i am happy. this is genius.";
    String arr[] = input.split("\\.");
    for (int i = 0; i < arr.length; i++) {

   System.out.print(Character.toUpperCase(arr[i].trim().
   charAt(0)) + arr[i].trim().substring(1) + ". ");
    }

我會使用正則表達式,因為它使用起來很快:用“。”分割你的字符串:

String[] split = input.split("\\.");

然后大寫生成的子字符串的第一個字母並重新結合到結果字符串。 (注意句點和字母之間的空格,可以用“\\。”分隔):

String result = "";
for (int i=0; i < split.length; i++) {
    result += Character.toUpperCase(split[i].trim());
}
System.out.println(result);

應該這樣做。

這是正則表達式的解決方案:

public static void main(String[]args) {

    String sentence = getSentence();

    Pattern pattern = Pattern.compile("^\\W*([a-zA-Z])|\\.\\W*([a-zA-Z])");
    Matcher matcher = pattern.matcher(sentence);
    StringBuffer stringBuffer = new StringBuffer("Capitalized: ");

    while (matcher.find()) {
        matcher.appendReplacement(stringBuffer, matcher.group(0).toUpperCase());
    }

    matcher.appendTail(stringBuffer);
    System.out.println(stringBuffer.toString());

}

使用正則表達式使用核心java執行此操作的正確方法將是

String sentence = "i am happy. this is genius.";
Pattern pattern = Pattern.compile("[^\\.]*\\.\\s*");
Matcher matcher = pattern.matcher(sentence);
String capitalized = "", match;
while(matcher.find()){
    match = matcher.group();
    capitalized += Character.toUpperCase(match.charAt(0)) + match.substring(1);
}
System.out.println(capitalized);

嘗試這個:
1.將第一個字母大寫。
2.如果角色是'。' 將標志設置為true,以便您可以將下一個字符大寫。

public static String capitalizeSentence(String str)
{
    if(str.length()>0)
    {
        char arr[] = str.toCharArray();
        boolean flag = true;
        for (int i = 0; i < str.length(); i++)
        {
            if (flag)
            {
                if (arr[i] >= 97 && arr[i] <= 122)
                {
                    arr[i] = (char) (arr[i] - 32);
                    flag = false;
                }
            } else
            {
                if (arr[i] == '.')
                    flag = true;
            }
        }
        return new String(arr);
    }
    return str;
}

只是用

org.apache.commons.lang3.text.WordUtils.capitalizeFully(sentence);

暫無
暫無

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

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