有特定要求的句子大写

Sentence Capitalizer with specific requirement

这很难解释,但我正在尝试创建一个程序,它只将每个以句点、问号或感叹号结尾的单词的字母大写。我在输入任何标记时都设法收到了结果,但只有在第二次输入时才收到结果。换句话说,我必须按两次回车键才能得到结果,但我不确定为什么。我仍在自己研究它,但我被这个问题困住了。

import java.util.*;

public class SentenceCapitalizer
{
    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.print("Input a sentence: ");
        String line = keyboard.nextLine();

        String wrong = keyboard.nextLine();
        String[] check = {".!?"};
        String upper_case_line="";
        Scanner lineScan = new Scanner(line);

        for (String sent : check)
        {
            if (sent.startsWith(wrong))
            {
                System.out.println("cant use .?!");
            }
            else
            {


             /* if (line.startsWith(" "))//if starts with space
                System.out.println("good");
            else
                System.out.println("bad");
            */

            //if (int i = 0; i < line.length; i++)
            //{char c = line.chartAt(i);
                while(lineScan.hasNext())
                {
                    String word = lineScan.next();
                    upper_case_line +=   Character.toUpperCase(word.charAt(0)) +
                            word.substring(1) + " ";
                }

                System.out.println(upper_case_line.trim());
            }
        } 

    }
}

解决方案

您好,这是您问题的快速解决方案。将字符串转换为字符数组,然后检查字符数组中是否存在“.!?”如果找到该值,那么它将使下一个字母大写!

public class SentenceCapitalizer {

public static void main(String[] args) {
    //Scanner, Variable to hold ouput
    Scanner keyboard = new Scanner(System.in);
    System.out.print("Input a sentence: ");
    String line = keyboard.nextLine();

    //Char array, boolean to check for capital
    char [] lineChars = line.toCharArray();
    boolean needCapital = false;

    //String to hold output
    String output = "";

    //Check for period in line
    for (int i = 0; i < lineChars.length; i++) {

        //Make sure first char is upper case
        if (i == 0) {
            lineChars[i] = Character.toUpperCase(lineChars[i]);
        }

        //Check for uppercase if char is not space
        if (needCapital && Character.isLetter(lineChars[i])) {
            lineChars[i] = Character.toUpperCase(lineChars[i]);
            needCapital = false;
        }

        if (lineChars[i] == '.' || lineChars[i] == '?' || lineChars[i] == '!') {
            needCapital = true;
        }

        //Add character to string
        output += lineChars[i];
    }

    //Output string
    System.out.println (output);
}
}