Word Separator and Pig Latin Program Final Edit This is an updated version of my previous Java program that asks the user for a sentence and then separates the words and then converts the sentence into Pig Latin. My previous program was working, but there was some tweeking that needed to be done which I did after getting positive feedback. Apparently, my loop in the separateWords function was checking for capital letters twice or so. I have included the instructions for the assignment for reference and the code for peer edit. Thank you.


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 &quot;StopAndSmellTheRose&quot; would be converted to &quot;Stop and smell the roses&quot;




Then the program will convert each word in the result string of task 1 into &quot;Pig Latin&quot;. 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 &quot;ay&quot; to the word.



For example, for the result string &quot;Stop and smell the roses&quot; in task 1, the Pig Latin string should be &quot;topSay ndaay mellsay hetay osesray&quot;


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


public class Assignment9 {
public static void main(String[] args) {    
    // Variables
    String sentence, revisedSentence; 
    
    // Create a Scanner object for keyboard input
    Scanner keyboard = new Scanner(System.in); 
    
    // Get the input string
    System.out.print(&quot;Enter sentence: &quot;);
    sentence = keyboard.nextLine(); 
    
    //Close keyboard
    keyboard.close();

    // Call function to perform Task 1
    revisedSentence = separateWords(sentence); 
    
    System.out.print(&quot;Revised Sentence: &quot; +revisedSentence); 
    
    // Call function to perform Task 2
    toPigLatin(revisedSentence); 
}

private static String separateWords(String sentence) 
{
    // Variables 
    StringBuilder str = new StringBuilder(sentence); 
    int i = 1; 
    
     // While loop repeats until the end of the sentence
    while (i &lt; str.length())
    {
        // Checks for upper case characters
        if(Character.isUpperCase(str.charAt(i)))
        {
            str.insert(i, ' '); 
            i++;
            char ch = Character.toLowerCase(str.charAt(i)); 
            str.setCharAt(i, ch);
        }
        i++; 
    }
    return str.toString();
}
    
private static void toPigLatin(String revisedSentence) 
{   
    // Variables
    String latin = &quot; &quot;; 
    
    // Split sentence by spaces
    String[] tokens = revisedSentence.split(&quot; &quot;);       
            
    // Convert English sentence into Pig Latin 
    for (int i = 0; i &lt; tokens.length; i++)
    {
        // Get string from array
        String str = tokens[i]; 
        
        // Get first letter from string
        String str1 = str.substring(0, 1); 
        
        // Get substring from string
        String str2 = str.substring(1, str.length()); 
        
        // Concatenate the two strings in a required format
        str2 = str2.concat(str1); 
        
        // Concatenate the result and &quot;AY&quot; 
        str2 = str2.concat(&quot;ay&quot;); 
        
        // Make a sentence with all the words 
        latin = latin.concat(str2 + &quot; &quot;); 
    }
    
    // Display pig latin verison
    System.out.println(&quot;\nPig Latin Version:&quot; +latin ); 
    }
}
Your commenting is absolutely abusive. This one is particularly beautiful... in its own way:
//Close keyboard
keyboard.close();

None of these comments are useful, because:

They state the obvious. Let the code speak for itself!
They tell the reader what the code is doing, but not why it's doing it.
They are a distraction. Reader/maintainer reads the comment, and then the code, and then subconsciously validates whether the comment reflects what the code underneath is saying.

See this beautiful answer specifically about comments - two things to remember:


Comments are supposed to make plain what the code does not tell us already.

Good code seldom needs comments




The naming is also inconsistent:
StringBuilder str = new StringBuilder(sentence); 

String str = tokens[i]; 

A better name for the former could be builder, and a meaningful name for the latter could be token.
Comments should not replace meaningful names:
// Get first letter from string
String str1 = str.substring(0, 1); 

If str1 were firstLetter...