Отмените каждое отдельное слово & ldquo; Hello World & rdquo; строка с Java

38
задан Vicheanak 21 July 2014 в 01:55
поделиться

8 ответов

Это должно помочь. Это будет перебирать каждое слово в исходной строке, обращать его, используя встроенный метод reverse () StringBuilder , и выводить перевернутое слово.

String source = "Hello World";

for (String part : source.split(" ")) {
    System.out.print(new StringBuilder(part).reverse().toString());
    System.out.print(" ");
}

Вывод:

olleH dlroW 

Примечания: Комментаторы правильно указали на несколько вещей, которые, как мне кажется, следует здесь упомянуть. В этом примере в конец результата будет добавлен дополнительный пробел. Также предполагается, что ваши слова разделены одним пробелом и ваше предложение не содержит знаков препинания.

106
ответ дан 27 November 2019 в 02:00
поделиться

Вот метод, который берет строку и меняет ее местами.

public String reverse ( String s ) {
            int length = s.length(), last = length - 1;
            char[] chars = s.toCharArray();
            for ( int i = 0; i < length/2; i++ ) {
                char c = chars[i];
                chars[i] = chars[last - i];
                chars[last - i] = c;
            }
            return new String(chars);
        }

Сначала вам нужно разделить строку на такие слова

String sample = "hello world";  
String[] words = sample.split(" ");  
1
ответ дан 27 November 2019 в 02:00
поделиться

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

public String reverse(String word) {
    char[] chs = word.toCharArray();

    int i=0, j=chs.length-1;
    while (i < j) {
        // swap chs[i] and chs[j]
        char t = chs[i];
        chs[i] = chs[j];
        chs[j] = t;
       i++; j--;
    }
    return String.valueOf(chs);
}
23
ответ дан 27 November 2019 в 02:00
поделиться
public static void main(String[] args) {
        System.out.println(eatWord(new StringBuilder("Hello World This Is Tony's Code"), new StringBuilder(), new StringBuilder()));
    }
static StringBuilder eatWord(StringBuilder feed, StringBuilder swallowed, StringBuilder digested) {
    for (int i = 0, size = feed.length(); i <= size; i++) {
        if (feed.indexOf(" ") == 0 || feed.length() == 0) {
            digested.append(swallowed + " ");
            swallowed = new StringBuilder();
        } else {
            swallowed.insert(0, feed.charAt(0));
        }
        feed = (feed.length() > 0)  ? feed.delete(0, 1) : feed ;
    }
    return digested;
}

запустить:

olleH dlroW sihT sI s'ynoT edoC 
BUILD SUCCESSFUL (total time: 0 seconds)
0
ответ дан 27 November 2019 в 02:00
поделиться

Я предполагаю, что вы можете просто распечатать результаты (вы просто сказали, что «результат должен быть ...»); -)

String str = "Hello World";
for (String word : str.split(" "))
    reverse(word);

void reverse(String s) {
    for (int idx = s.length() - 1; idx >= 0; idx--) 
        System.out.println(s.charAt(idx));
}

Или вернуть перевернутую строку:

String str = "Hello World";
StringBuilder reversed = new StringBuilder();
for (String word : str.split(" ")) {
  reversed.append(reverse(word));
  reversed.append(' ');
}
System.out.println(reversed);

String reverse(String s) {
  StringBuilder b = new StringBuilder();
  for (int idx = s.length() - 1; idx >= 0; idx--)
      b.append(s.charAt(idx));
  return b.toString();
}
4
ответ дан 27 November 2019 в 02:00
поделиться

Учитывая, что разделителем может быть более одного пробела/табуляции и что мы хотим их сохранить:

public static String reverse(String string)
{
    StringBuilder sb = new StringBuilder(string.length());
    StringBuilder wsb = new StringBuilder(string.length());
    for (int i = 0; i < string.length(); i++)
    {
        char c = string.charAt(i);
        if (c == '\t' || c == ' ')
        {
            if (wsb.length() > 0)
            {
                sb.append(wsb.reverse().toString());
                wsb = new StringBuilder(string.length() - sb.length());
            }
            sb.append(c);
        }
        else
        {
            wsb.append(c);
        }
    }
    if (wsb.length() > 0)
    {
        sb.append(wsb.reverse().toString());
    }
    return sb.toString();

}
3
ответ дан 27 November 2019 в 02:00
поделиться

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

public class olleHdlroW {
    static String reverse(String in, String out) {
        return (in.isEmpty()) ? out :
            (in.charAt(0) == ' ')
            ? out + ' ' + reverse(in.substring(1), "")
            : reverse(in.substring(1), in.charAt(0) + out);
    }
    public static void main(String args[]) {
        System.out.println(reverse("Hello World", ""));
    }
}

Даже если это домашнее задание, не стесняйтесь копировать его и отправлять как свое собственное. Вы либо получите дополнительный балл (если можете объяснить, как это работает), либо вас поймают за плагиат (если вы не можете).

17
ответ дан 27 November 2019 в 02:00
поделиться

Знайте свои библиотеки; -)

import org.apache.commons.lang.StringUtils;

String reverseWords(String sentence) {
    return StringUtils.reverseDelimited(StringUtils.reverse(sentence), ' ');
}
47
ответ дан 27 November 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: