Отменить заданное предложение в Java - PullRequest
13 голосов
/ 26 апреля 2010

Может кто-нибудь сказать мне, как написать программу на Java, чтобы отменить заданное предложение?

Например, если введено:

"Это вопрос интервью"

Выходные данные должны быть:

"Вопрос интервью и это"

Ответы [ 14 ]

24 голосов
/ 26 апреля 2010

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

String[] words =  "This is interview question".split(" ");

String rev = "";
for(int i = words.length - 1; i >= 0 ; i--)
{
   rev += words[i] + " ";
}

// rev = "question interview is This "

// can also use StringBuilder:
StringBuilder revb = new StringBuilder();
for(int i = words.length - 1; i >= 0 ; i--)
{
   revb.append(words[i]);
   revb.append(" ");
}
// revb.toString() = "question interview is This "
23 голосов
/ 26 апреля 2010
String[] words = sentence.split(" ");
String[] reversedWords = ArrayUtils.reverse(words);
String reversedSentence = StringUtils.join(reversedWords, " ");

(используя ArrayUtils и StringUtils от commons-lang, но это простой способ написания - всего несколько циклов)

19 голосов
/ 26 апреля 2010

Просто быть другим: рекурсивное решение. Не добавляет лишних пробелов.

public static String reverse(String s) {
   int k = s.indexOf(" ");
   return k == -1 ? s : reverse(s.substring(k + 1)) + " " + s.substring(0, k);
}


System.out.println("[" + reverse("This is interview question") + "]");
// prints "[question interview is This]"

Я также улучшу решение split, используя вместо него \b (это так очевидно!).

    String[] parts = "Word boundary is better than space".split("\\b");
    StringBuilder sb = new StringBuilder();
    for (int i = parts.length; i --> 0 ;) {
        sb.append(parts[i]);
    }
    System.out.println("[" + sb.toString() + "]");
    // prints "[space than better is boundary Word]"
6 голосов
/ 26 апреля 2010

Божо уже дал отличный ответ, специфичный для Java, но в случае, если вам когда-нибудь понадобится решить эту проблему без методов Java API:

Для обратного вы можете просто вставить отдельные слова в stack и вытолкнуть их обратно, когда не осталось слов.

(Просто для большей ясности, Java предоставляет Stack класс , так что это возможноиспользовать этот метод и в Java).

6 голосов
/ 26 апреля 2010

Просто разбейте его на символ пробела в массив строк, затем зациклите массив в обратном порядке и создайте строку вывода.

String input = "This is interview question";
String output = "";
String[] array = input.split(" ");
for(int i = array.length-1; i >= 0; i--)
{
    output += array[i];
    if (i != 0) { output += " "; }
}
3 голосов
/ 26 апреля 2010

Я также попробую: вот версия с использованием стека и сканера:

String input = "this is interview question";
Scanner sc = new Scanner(input);
Stack<String> stack = new Stack<String>();

while(sc.hasNext()) {
    stack.push(sc.next());
}

StringBuilder output = new StringBuilder();

for(;;) { // forever
    output.append(stack.pop());

    if(stack.isEmpty()) {
        break; // end loop
    } else {
        output.append(" ");
    }
}
3 голосов
/ 26 апреля 2010

каждый скучный бит Java:

List<String> l = new ArrayList<String>(Arrays.asList("this is an interview question".split("\\s")));
Collections.reverse(l);
StringBuffer b = new StringBuffer();
for( String s : l ){
    b.append(s).append(' ');
}
b.toString().trim();

в Groovy это немного более читабельно:

"this is an interview question"
    .split("\\s")
    .reverse()
    .join(' ')
2 голосов
/ 28 апреля 2010
public class ReverseString {

    public void reverse(String[] source) {

        String dest = "";
        for (int n = source.length - 1; n >= 0; n--) {
            dest += source[n] + " ";
        }
        System.out.println(dest);

    }

    public static void main(String args[]) {
        ReverseString rs = new ReverseString();
        String[] str = "What is going on".split(" ");
        rs.reverse(str);

    }

}
1 голос
/ 10 августа 2016

, пожалуйста, попробуйте следующее решение, это работает для меня.

public class reverseline {

public static void main(String[] args) {
    // TODO Auto-generated method stub

        String str="This is interview question";
    String words[]=str.split(" ");
    for(int i=words.length-1;i>=0;i--){
        System.out.print(words[i]+" ");
    }
}

}
1 голос
/ 20 сентября 2015

Никто еще не упомянул ванильное решение на основе Java 8, которое совпадает с Bozho , но без каких-либо сторонних библиотек. Итак, вот оно:

String input = "This is interview question";

List<String> list = Arrays.asList(input.split(" "));
Collections.reverse(list);
System.out.println(list.stream().collect(Collectors.joining(" ")));
...