如何使用java将每个句子中的第一个字母大写后?

时间:2015-08-27 12:43:22

标签: java string

我目前正在学习如何操纵字符串,我认为我需要一段时间才能习惯它。我想知道如何在每个句子中经过一段时间后将一封信用于大写。

输出如下:

输入句子:我很开心。这是天才。

资本化:我很高兴。这是天才。

我已经尝试创建自己的代码,但它不起作用,随时纠正并更改它。这是我的代码:

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;
    }
}

棘手的部分是如何在句号结束后(“。”)将字母大写?我没有很多字符串操作知识,所以我真的陷入了这个领域。

9 个答案:

答案 0 :(得分:4)

试试这个:

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;
    }
}

这是通过字符串中的所有字符顺序前进并保持下一个字符需要大写的状态。

enter image description here

按照评论进行更深入的摘要。

答案 1 :(得分:3)

您可以实现状态机:

State machine

它从大写状态开始,当每个字符被读取时它会发出它,然后决定下一个要进入的状态。

由于只有两种状态,状态可以存储在布尔值中。

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();
}

答案 2 :(得分:1)

  1. 好像你的教授正在重复他的作业。这已经被问到: Capitalize first word of a sentence in a string with multiple sentences

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

  3. 和番石榴

        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));
        }
    

答案 3 :(得分:0)

您可以使用以下代码将句点后的第一个字母大写   每句话。

if(object.getAttribute("data-params")==="undefined") {
   //data-attribute doesn't exist
}

答案 4 :(得分:0)

我会选择正则表达式,因为它使用起来很快: 用“。”分隔你的字符串:

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

然后大写生成的子字符串的第一个字母并重新结合到结果字符串。 (注意句点和字母之间的空格,可以用“\。”分隔):

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

应该这样做。

答案 5 :(得分:0)

以下是正则表达式的解决方案:

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());

}

答案 6 :(得分:0)

使用正则表达式使用核心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);

答案 7 :(得分:0)

试试这个:
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;
}

答案 8 :(得分:0)

只需使用

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