Проблемы с выводом в Java - PullRequest
       81

Проблемы с выводом в Java

0 голосов
/ 22 сентября 2018

Понятия не имею, почему мой вывод не получается правильным.Например, если на входе «Running is fun», то на выходе должно появиться «Is running fun».Однако вывод, который я получаю - «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 );

  }
}

Ответы [ 4 ]

0 голосов
/ 23 сентября 2018

Это работает правильно:

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);
    }
}
0 голосов
/ 22 сентября 2018

Ваша проблема в том, что

firstWord.substring(1).toLowerCase()

не работает так, как вы ожидаете, что оно будет работать.

Если firstWord равно “Running“, как в вашем примере, то

”Running“.substring(1)

Возвращает «unning»

”unning“.toLowerCase()

Очевидно возвращает «unning»

0 голосов
/ 22 сентября 2018

Проблема в String newSentence.Вы не сделаете правильную комбинацию firstWord и removedWord.

. Вот как должно быть в вашем случае:

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

РЕДАКТИРОВАТЬ (добавить новое решение. 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();
0 голосов
/ 22 сентября 2018

removedWord.substring(0,1).toUpperCase() эта строка добавляет заглавную первую букву второго слова в предложении.(I)

firstWord.substring(1).toLowerCase(); добавляет каждую букву первого слова в конец предложения.(unning)

Таким образом, это создает вывод Iunning.Вам необходимо добавить остаток removedWord к String, а также пробел и первую букву firstWord в виде строчной буквы в пробеле в removedWord.Вы можете сделать это больше, используя indexOf, чтобы найти пространство, а затем, используя substring(), добавить firstWord.toLowerCase() сразу после индекса пространства:

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());

Выход:

Is running fun
...