Sara Bryja
Sara Bryja

Reputation: 13

Problems with Output in Java

I have no idea why my output is not coming out correct. For example, if the input is "Running is fun" then the output should read "Is running fun". However, the output I am getting is "Iunning".

  import java.util.Scanner;
  public class Problem1 {
  public static void main( String [] args ) {

 Scanner sc = new Scanner(System.in);

 System.out.println("Enter text: ");
 String sentence = sc.nextLine();

  int space = sentence.indexOf(" ");
 String firstWord = sentence.substring(0, space + 1);
 String removedWord = sentence.replaceFirst(firstWord, "");

String newSentence = removedWord.substring(0,1).toUpperCase() + 
firstWord.substring(1).toLowerCase();

System.out.println(""); 
System.out.println( newSentence );

  }
}

Upvotes: 1

Views: 198

Answers (4)

Rostislav Krasny
Rostislav Krasny

Reputation: 695

This works properly:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    System.out.println("Enter text: ");
    String sentence = sc.nextLine();

    int space1 = sentence.indexOf(' ');
    int space2 = sentence.indexOf(' ', space1 + 1);

    if (space1 != -1 &&  space2 != -1) {
        String firstWord = sentence.substring(0, space1 + 1);
        String secondWord = sentence.substring(space1 + 1, space2 + 1);

        StringBuilder newSentence = new StringBuilder(sentence);
        newSentence.replace(0, secondWord.length(), secondWord);
        newSentence.replace(secondWord.length(), secondWord.length()+ firstWord.length(), firstWord);
        newSentence.setCharAt(0, Character.toUpperCase(newSentence.charAt(0)));
        newSentence.setCharAt(secondWord.length(), Character.toLowerCase(newSentence.charAt(secondWord.length())));

        System.out.println(newSentence);
    }
}

Upvotes: 0

GBlodgett
GBlodgett

Reputation: 12819

removedWord.substring(0,1).toUpperCase() this line adds the capitalized first letter of the second word in the sentence. (I)

firstWord.substring(1).toLowerCase(); adds every letter of the first word to the end of the sentence. (unning)

Thus this creates the output of Iunning. You need to add the rest of removedWord to the String, as well as a space, and the first letter of firstWord, as a lower case letter at the space in removedWord. You can do this more by using indexOf to find the space, and then using substring() to add on firstWord.toLowerCase() right after the index of the space:

removedWord = removedWord.substring(0, removedWord.indexOf(" ")) + " " + 
              firstWord.toLowerCase() + 
              removedWord.substring(removedWord.indexOf(" ") + 1, 
              removedWord.length());
String newSentence = removedWord.substring(0,1).toUpperCase() + 
                 removedWord.substring(1, removedWord.length());

Output:

Is running fun

Upvotes: 1

KunLun
KunLun

Reputation: 3225

The problem is at String newSentence. You not make the right combination of firstWord and removedWord.

This is how should be for your case:

String newSentence = removedWord.substring(0, 1).toUpperCase()  // I
                + removedWord.substring(1,2) + " "      // s
                + firstWord.toLowerCase().trim() + " "  // running
                + removedWord.substring(2).trim();      // fun

EDIT(add new solution. credits @andy):

String[] words = sentence.split(" ");

words[1] = words[1].substring(0, 1).toUpperCase() + words[1].substring(1);

String newSentence = words[1] + " " 
                + words[0].toLowerCase() + " " 
                + words[2].toLowerCase();

Upvotes: 0

dpr
dpr

Reputation: 10964

Your problem is that

firstWord.substring(1).toLowerCase()

Is not working as you expect it to work.

Given firstWord is “Running“ as in your example, then

”Running“.substring(1)

Returns ”unning“

”unning“.toLowerCase()

Obviously returns ”unning“

Upvotes: 0

Related Questions