Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

string

I'm currently learning on how to manipulate strings and i think it'll take awhile for me to get used to it. I wanted to know how to capitalize a letter after a period in each sentence.

The output is like this:

Enter sentences: i am happy. this is genius.

Capitalized: I am happy. This is genius.

I have tried creating my own code but its not working, feel free to correct and change it. Here is my code:

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

The tricky part is how am i gonna capitalize a letter after the period(".")? I don't have a lot of string manipulation knowledge so I'm really stuck in this area.

like image 340
Pearl Avatar asked Sep 14 '25 11:09

Pearl


1 Answers

You could implement a state machine:

State machine

It starts in the capitalize state, as each character is read it emits it and then decides what state to go to next.

As there are just two states, the state can be stored in a boolean.

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();
}
like image 92
weston Avatar answered Sep 16 '25 02:09

weston