2016-11-22 4 views
0

Я новичок, и я хочу написать программу, которая берет строку от пользователя и отменяет каждое слово, но не все предложение. Например, если «gnimmargorP si nuf» является входным, выход должен быть «Программирование - это весело». не «веселье программирования», что я могу сделать или изменить, чтобы сделать программу см слова предложенийМетоды использования Java

Я писал:

import java.util.Scanner; 

public class Lab06 
{ 
    public static void main(String[] args) 
    { 
      Scanner scan = new Scanner(System.in); 
      String line; 
      // REVERSER 

      System.out.println(); 
      System.out.println("Please enter a line"); 
      line = scan.nextLine(); 
      System.out.println("The reverse of the sentence is:"); 
      System.out.println(reverse(line)); 
    } 

    public static String reverse(String s) 
    { 
      String answer = ""; 
      int length = s.length(); 
      for (int i = length - 1; i >= 0; i--) 
      { 
       answer = answer + s.charAt(i); 

      } 
      return answer; 
    } 
} 
+3

Вы можете использовать line.split (»«), чтобы разбить строку на слова, и запустить обратный на слово отдельно , – Eran

ответ

1

Вы можете разделить введенную фразу с пробелами и применить обратный метод каждое слово. Наконец, вы можете связать их с одной строкой.

+0

, но я не знаю предложения до того, как пользователь вводит его, как я могу знать, где разделить его заранее. –

+0

@EkinAlparslan, 'split (String)' сделайте это для вас, он возвращает массив. Areca Пожалуйста, добавьте дополнительную информацию о методах в этом ответе;) – AxelH

3

попробуйте этот код

String input = "gnimmargorP si nuf"; 
    String[] arr = input.split(" "); 
    for (String word : arr) { 
     StringBuilder out = new StringBuilder(word).reverse().append(" "); 
     System.out.print(out.toString()); 
    } 

Конечно, вы можете использовать свой собственный метод reverse

+0

Спасибо. Я не хотел вводить регулярное выражение, но, конечно, это другой способ. –

+0

Ох ... неважно ... Но я думаю, что это безопаснее. –

-1

Вы можете разделить введенную строку, используйте метод reverse() StringBuilder, и сцепить его обратно в одну строку.

public static String reverse(String s) { 
    StringBuilder answer = new StringBuilder(); 

    if (null == s || 0 == s.length()) { 
     return answer.toString(); 
    } 

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

    for (int i = 0, lastIndex = s.length() - 1; i < s.length(); i++) { 
     StringBuilder sb = new StringBuilder(words[i]); 

     sb.reverse(); 

     if (i != lastIndex) { 
      sb.append(" "); 
     } 

     answer.append(sb.toString()); 
    } 

    return answer.toString(); 
} 
+0

Я бы подумал, что вы можете использовать другой 'StringBuilder' для' answer'. Если вы хотите создать и убить каждую итерацию для удобства 'reverse()', то еще один, чтобы использовать, где это наиболее полезно, не может повредить. – ChiefTwoPencils

0

Прошу ввести код. Прокомментируйте, пожалуйста, если вы не понимаете что-нибудь:

import java.util.Scanner; 

public class Lab06 
{ 
    public static void main(String[] args) 
    { 
     Scanner scan = new Scanner(System.in); 
     String line; 

     // REVERSER 
     try{ 
      System.out.println(); 
      System.out.println("Please enter a line:"); 
      line = scan.nextLine(); 
      StringBuilder answer = new StringBuilder(line.length()); 


      String[] words = line.split("\\s+"); 
      for(String word : words){ 
       answer.append(reverse(word)).append(" "); 
      } 
      System.out.println("The reverse of the sentence is:"); 
      System.out.println(answer); 
     }catch(Exception e){ 

     }finally{ 
      scan.close(); 
     } 
    } 


    public static String reverse(String input) 
    { 
     String answer = ""; 
     int length = input.length(); 
     for (int i = length - 1; i >= 0; i--) { 
      answer = answer + input.charAt(i); 
     } 
     return answer; 
    } 
} 
3

Я добавлю пример Java 8 в смеси ради краткости.

Arrays.stream("gnimmargorP si nuf".split(" ")) 
     .forEach(s -> System.out.printf("%s ", new StringBuilder(s).reverse())); 

Вы получаете поток из массива, созданного путем разделения строки вокруг " " с, перебирать каждое слово, и распечатать его обратное с последующим пробелом.

+1

Я люблю ответы с помощью java 8. Он делает много вещей, как магия. –

0

Вам необходимо выполнить следующие действия:

(1) Разделить слова, используя пространство разделителем

(2) Итерации каждое слово

(3) итерацию каждого символа и добавить каждый символ StringBuilder объекта

(4) Суффикс пространство снова для каждого слова

(5) Преобразование StringBuilder объекта в строку снова

Вы можете передать код ниже с комментариями:

public static String reverse(String s) { 
     String[] words = s.split(" ");//split the words using space 

     StringBuilder sb = new StringBuilder(); 
     for(String word : words) {//Iterate each word 
      for(int i=word.length()-1;i>=0;i--) {//Iterate each character 
       sb.append(word.charAt(i)); 
      } 
      sb.append(" ");//suffix space again after each word 
     } 
     return sb.toString();//convert to string again 
    } 
+0

Я люблю 'strungbufer' –

+0

Я думаю, что' StringBuilder' лучше, чем 'StringBuffer'. –

 Смежные вопросы

  • Нет связанных вопросов^_^