如何让我的程序将句子的第一个字母大写?

时间:2013-12-15 20:07:17

标签: java regex string replace

我必须让我的程序大写句子的第一个字母,并且由于某种原因我的代码不起作用。我不知道为什么 - 我的代码看起来应该可以工作,我知道更好的责任归咎于Java中的“可能”错误,因为我缺乏经验。这是我到目前为止所得到的:

public class SentenceFormator {
    public static String format(String str){
        String fmts = str;
        String temp;

        //Finds first subString makes it capitalized and replaces it in original String.
        temp = fmts.substring(0, 1).toUpperCase();
        fmts = fmts.replaceFirst(fmts.substring(0,1), temp);
        //Makes all other letters after beginning of sentence lower-case.
        fmts = fmts.substring(1,str.length()-1).toLowerCase();
        //Capitalizes all i's in the String.
        fmts = fmts.replaceAll(" i ", " I ");
        //Take away white spaces at the end and beginning of the String.
        fmts = fmts.trim();
        //Add punctuation if not already there. 
        if(!fmts.endsWith(".")||fmts.endsWith("!")||fmts.endsWith("?")){
            fmts = fmts.concat(".");
        }
        //Takes away  

        for(int i = 0; i<str.length();i++){

        }
        return fmts;
    }
}

3 个答案:

答案 0 :(得分:0)

查看ACL WordUtils

答案 1 :(得分:0)

看看你在代码中真正做了什么

//you store uppercase version of first letter in `temp`
temp = fmts.substring(0, 1).toUpperCase();
//now you replace first letter with upper-cased one
fmts = fmts.replaceFirst(fmts.substring(0,1), temp);

现在是你错误的时间

//here you are storing in `fmts` as lower-case part **after** first letter
//so `fmts =" Abcd"` becomes `fmts = "bcd"`
fmts = fmts.substring(1,str.length()-1).toLowerCase();

要更正它,您可以在新字符串的开头添加temp值,如

fmts = temp + fmts.substring(1).toLowerCase();//BTW you can use `substring(1)` 
                                      //instead of `substring(1,str.length()-1)`

答案 2 :(得分:0)

String str = " hello world"

首先减少空间(避免前面的空格)

str = str.trim().replaceAll(" +", " ");

将第一个字母大写并小写其他所有内容(将它们都添加)

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