Java: Exercise - Capitalize Words
Problem
Write a method which which returns a string first letter in every word
capitalized and every other letter in lowercase.
Assume the first letter is any letter preceded by a non-alphabetic.
This is slightly more difficult than
Exercise - Count Words,
but uses the same basic algorithm.
Signature
public static String capitalizeWords(String s)
Note: This is declared static because it is doesn't depend on
any instance variables from the class it would be defined in.
It's declared public only because
it might be generally useful.
Example
| Call | Returns | Comments |
capitalizeWords("hello world") | "Hello World" | Each word capitalized. |
capitalizeWords("HELLO WORLD") | "Hello World" | Each word capitalized, remainder lowercase. |
capitalizeWords("Hello World") | "Hello World" | Result happens to be the same. |
capitalizeWords("Don't worry?") | "Don'T Worry? | The quote starts new word. See Extensions section. |
capitalizeWords("Easy as 123") | "Easy As 123" | Only alphabetics are affected. |
Hints
One way to solve this is to go down the string one character at a time.
Use a boolean variable to indicate whether you're in a word or not.
When the variable indicates that you're in a word, change alphabetics
to lowercase (use
Character.toLowerCase()).
You can test for
alphabetic characters with
Character.isLetter().
If an alphabetic character is encountered when you're outside a word,
it must be the first letter so it should be changed to uppercase
with
Character.toUpperCase() and switch the state of the
boolean variable.
Extensions
A better definition of "word" would make this better.
For example,
non-alphabetics between words should only count
if they include at least one blank so that
contractions like "don't" aren't counted as two words.
Assumptions
Write only the method. You can easily change the
Example - Generic Calc
program to use this method.