Как перевернуть два слова в строку, Java - PullRequest
2 голосов
/ 11 января 2012

Скажем, у меня есть строка с именем x that = "Hello world". Я хочу как-то сделать так, чтобы они перевернули эти два слова и вместо этого отобразили «world Hello». Я не очень хорош с циклами или массивами и, очевидно, я новичок. Могу ли я сделать это как-нибудь, разделив мою строку? Если так, то как? Если нет, как я мог это сделать? Помощь будет оценена, спасибо!

Ответы [ 6 ]

6 голосов
/ 11 января 2012

1) разбить строку на массив String в пространстве.

String myArray[] = x.split(" ");

2) Создать новую строку со словами в обратном порядке из массива.

String newString = myArray[1] + " " + myArray[0];

Бонусные баллы за использованиеStringBuilder вместо конкатенации.

1 голос
/ 11 января 2012

Вот решение:

import java.util.*;

public class ReverseWords {
public String reverseWords(String phrase) {
List<string> wordList = Arrays.asList(phrase.split("[ ]"));
Collections.reverse(wordList);

StringBuilder sbReverseString = new StringBuilder();
for(String word: wordList) {
sbReverseString.append(word + " ");
}

return sbReverseString.substring(0, sbReverseString.length() - 1);
}
}

Вышеупомянутое решение было написано мной для Google Code Jam и также опубликовано здесь: Обратные слова - GCJ 2010

1 голос
/ 11 января 2012
String abc = "Hello world";
String cba = abc.replace( "Hello world", "world Hello" );

abc = "This is a longer string. Hello world. My String";
cba = abc.replace( "Hello world", "world Hello" );

Если вы хотите, вы также можете взорвать вашу строку:

String[] pieces = abc.split(" ");
for( int i=0; i<pieces.length-1; ++i )
    if( pieces[i]=="Hello" && pieces[i+1]=="world" ) swap(pieces[i], pieces[i+1]);

Есть много других способов сделать это тоже. Будьте осторожны с заглавными буквами. Вы можете использовать .toUpperCase () в своих операторах if, а затем сделать соответствующие термины заглавными, но оставить результаты с их первоначальным использованием заглавных букв и т. Д.

0 голосов
/ 11 января 2012

Слишком много?

private static final Pattern WORD = Pattern.compile("^(\\p{L}+)");
private static final Pattern NUMBER = Pattern.compile("^(\\p{N}+)");
private static final Pattern SPACE = Pattern.compile("^(\\p{Z}+)");

public static String reverseWords(final String text) {
    final StringBuilder sb = new StringBuilder(text.length());

    final Matcher wordMatcher = WORD.matcher(text);
    final Matcher numberMatcher = NUMBER.matcher(text);
    final Matcher spaceMatcher = SPACE.matcher(text);

    int offset = 0;
    while (offset < text.length()) {

        wordMatcher.region(offset, text.length());
        numberMatcher.region(offset, text.length());
        spaceMatcher.region(offset, text.length());

        if (wordMatcher.find()) {
            final String word = wordMatcher.group();
            sb.insert(0, reverseCamelCase(word));
            offset = wordMatcher.end();
        } else if (numberMatcher.find()) {
            sb.insert(0, numberMatcher.group());
            offset = numberMatcher.end();
        } else if (spaceMatcher.find()) {
            sb.insert(0, spaceMatcher.group(0));
            offset = spaceMatcher.end();
        } else {
            sb.insert(0, text.charAt(offset++));
        }
    }

    return sb.toString();
}

private static final Pattern CASE_REVERSAL = Pattern
        .compile("(\\p{Lu})(\\p{Ll}*)(\\p{Ll})$");

private static String reverseCamelCase(final String word) {
    final StringBuilder sb = new StringBuilder(word.length());
    final Matcher caseReversalMatcher = CASE_REVERSAL.matcher(word);
    int wordEndOffset = word.length();
    while (wordEndOffset > 0 && caseReversalMatcher.find()) {
        sb.insert(0, caseReversalMatcher.group(3).toUpperCase());
        sb.insert(0, caseReversalMatcher.group(2));
        sb.insert(0, caseReversalMatcher.group(1).toLowerCase());
        wordEndOffset = caseReversalMatcher.start();
        caseReversalMatcher.region(0, wordEndOffset);
    }
    sb.insert(0, word.substring(0, wordEndOffset));
    return sb.toString();
}
0 голосов
/ 11 января 2012

Попробуйте сделать следующее:

String input = "how is this";
List<String> words = Arrays.asList(input.split(" "));
Collections.reverse(words);
String result = "";
for(String word : words) {
    if(!result.isEmpty()) {
        result += " ";
    }
    result += word;
}
System.out.println(result);

Вывод:

this is how
0 голосов
/ 11 января 2012

В зависимости от ваших точных требований, вы можете разделить пробелы на другие формы (табуляция, несколько пробелов и т.http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

...