snippetjavaMinor
Separate combined words in a sentence and convert them into Pig Latin
Viewed 0 times
convertintowordsseparatelatinsentenceandcombinedthempig
Problem
My program is complete and working, but I would like second opinions on it.
Here are the instructions for the assignment:
-
The program will accept a string as input in which all of the words are run together, but the first character of each word is uppercase.
Convert the string to a string in which the words are separated by
spaces and only the first word starts with an uppercase letter. For
example, the string "StopAndSmellTheRoses" would be converted to "Stop
and smell the roses".
-
Then the program will convert each word in the result string of task 1 into "Pig Latin". In one version of Pig Latin, you convert a
word by removing the first letter, placing that letter at the end of
the word, and then appending "ay" to the word.
For example, for the result string "Stop and smell the roses" in task
1, the Pig Latin string should be "topSay ndaay mellsay hetay osesray".
Requirements:
```
import java.util.Scanner;
public class Assignment9
{
public static void main(String[] args)
{
// Variables
String sentence, revisedSentence, latin = " ";
// Create a Scanner object for keyboard input
Scanner keyboard = new Scanner(System.in);
// Get the input string
System.out.print("Enter sentence: ");
sentence = keyboard.nextLine();
//Close keyboard
keyboard.close();
// Task 1
revisedSentence = WordSeparator(sentence);
System.out.print("Revised Sentence: " +revisedSentence);
// Task 2
PigLatin(revisedSentence, latin);
System.exit(0);
}
private static String WordSeparator(String sentence)
{
// Variables
StringBuilder str = new StringBuilder(sentence);
int i = 1;
// While loop repeats until th
Here are the instructions for the assignment:
-
The program will accept a string as input in which all of the words are run together, but the first character of each word is uppercase.
Convert the string to a string in which the words are separated by
spaces and only the first word starts with an uppercase letter. For
example, the string "StopAndSmellTheRoses" would be converted to "Stop
and smell the roses".
-
Then the program will convert each word in the result string of task 1 into "Pig Latin". In one version of Pig Latin, you convert a
word by removing the first letter, placing that letter at the end of
the word, and then appending "ay" to the word.
For example, for the result string "Stop and smell the roses" in task
1, the Pig Latin string should be "topSay ndaay mellsay hetay osesray".
Requirements:
- Your program should have 3 methods: a main method, a method for task 1, and a method for task2.
- The method for task 1 should return the result string of task1.
- The method for task 2 should display the Pig Latin string.
```
import java.util.Scanner;
public class Assignment9
{
public static void main(String[] args)
{
// Variables
String sentence, revisedSentence, latin = " ";
// Create a Scanner object for keyboard input
Scanner keyboard = new Scanner(System.in);
// Get the input string
System.out.print("Enter sentence: ");
sentence = keyboard.nextLine();
//Close keyboard
keyboard.close();
// Task 1
revisedSentence = WordSeparator(sentence);
System.out.print("Revised Sentence: " +revisedSentence);
// Task 2
PigLatin(revisedSentence, latin);
System.exit(0);
}
private static String WordSeparator(String sentence)
{
// Variables
StringBuilder str = new StringBuilder(sentence);
int i = 1;
// While loop repeats until th
Solution
This is in addition to what @thecoder16 already said.
Methods should be named using verbs instead of nouns.
They usually take some action on the input,
for example this method separates the words that were stuck together.
So
Also, this part is not great:
Objections:
-
The
-
The comments only state the obvious. Unnecessary comments are like noise, and a waste of time to read. Let the code speak for itself.
It would be better this way:
The biggest issue here is the
Issues similar to
Other smaller issues:
WordSeparatorMethods should be named using verbs instead of nouns.
They usually take some action on the input,
for example this method separates the words that were stuck together.
So
separateWords would be better.Also, this part is not great:
// Checks for upper case characters
if(Character.isUpperCase(str.charAt(i)))
{
//Inserting space
str.insert(i, ' ');
char ch = Character.toLowerCase(str.charAt(i+1));
str.setCharAt((i+1), ch);
}Objections:
-
The
str.charAt(i) and str.charAt(i+1) refer to the same character. This is repetitive, and can be prone to errors, as you have to remember to use i+1 the second time because of the inserted space-
The comments only state the obvious. Unnecessary comments are like noise, and a waste of time to read. Let the code speak for itself.
It would be better this way:
char ch = str.charAt(i);
if (Character.isUpperCase(ch)) {
str.insert(i, ' ');
str.setCharAt(i + 1, Character.toLowerCase(ch));
}PigLatinThe biggest issue here is the
latin = latin.concat(...) call for two reasons:- String concatenation is inefficient. You should use a
StringBuilderlike you did in your other method.
- Reusing input parameters is not a good practice, as it can be confusing and error prone. It would be better to name local variables differently.
Issues similar to
WordSeparator:- The method is poorly named. Perhaps
toPigLatinwould be better.
- The comments are unnecessary noise
Other smaller issues:
- Instead of printing output, it would be better to return the result
- The
String[] arris unused, so it would be better to remove it
- The counting for loop can be converted to an enhanced loop, for example:
for (String str : tokens) { ... }
- The input parameter
revisedSentencecarries information that's unnecessary for the functioning of this method. Justsentencewould be enough.
Code Snippets
// Checks for upper case characters
if(Character.isUpperCase(str.charAt(i)))
{
//Inserting space
str.insert(i, ' ');
char ch = Character.toLowerCase(str.charAt(i+1));
str.setCharAt((i+1), ch);
}char ch = str.charAt(i);
if (Character.isUpperCase(ch)) {
str.insert(i, ' ');
str.setCharAt(i + 1, Character.toLowerCase(ch));
}Context
StackExchange Code Review Q#87592, answer score: 8
Revisions (0)
No revisions yet.