Возвращение строки, введенной как обратный текст в Java - PullRequest
5 голосов
/ 02 февраля 2009

Я пытаюсь создать метод, который возвращает строку слов в обратном порядке.

IE / "Дождь в Испании в основном идет на" Вернется: "Песня в основном падает Испанией в дождь"

Для этого я не должен использовать какие-либо встроенные классы Java, только базовую Java.

Пока у меня есть:

    lastSpace = stringIn.length(); 

    for (int i = stringIn.length() - 1; i >= 0; i--){
        chIn = stringIn.charAt(i);
        if (chIn == ' '){
            word = stringIn.substring(i + 1, lastSpace);
            stringOut.concat(word);
            lastS = i;
        }
    }
    word = stringIn.substring(0,lastSpace);
    stringOut.concat(word);

    return stringOut;

Моя проблема в том, что stringOut возвращается вызывающей стороне, это всегда пустая строка.

Я что-то не так делаю? Может быть, мое использование string.concat()?

Ответы [ 6 ]

8 голосов
/ 02 февраля 2009

В Java строки являются неизменяемыми, то есть их нельзя изменить. concat () возвращает новую строку с конкатенацией. Итак, вы хотите что-то вроде этого:

stringOut = stringOut.concat(word);

или

stringOut += word

как отмечает Рэй, есть более краткие способы сделать это.

3 голосов
/ 02 февраля 2009
public String reverseWords(String words)
{
  if(words == null || words.isEmpty() || !words.contains(" "))
    return words;

  String reversed = "";
  for(String word : words.split(" "))
    reversed = word + " " + reversed;

  return reversed.trim();
}

Только API используется String (что должно быть разрешено при работе со строками ...)

1 голос
/ 02 февраля 2009

Было бы лучше, если бы вы использовали метод indexOf класса String, а не этот цикл для поиска каждого пробела.

0 голосов
/ 22 апреля 2012
public String reverseString(String originalString)
     {
     String reverseString="";
     String substring[]=originalString.split(" ");// at least one space between this double                      //quotes

    for(int i=(substring.length-1);i>=0;i--)
        {
        reverseString = reverseString + substring[i];
        }

      return sreverseString;
     }
0 голосов
/ 02 февраля 2009

Я чувствовал, что кодирую, так что вот, пожалуйста:


import java.util.*;

class ReverseBuffer {
    private StringBuilder soFar;
    public ReverseBuffer() {
        soFar = new StringBuilder();
    }

    public void add(char ch) {
        soFar.append(ch);
    }

    public String getReversedString() {
        String str = soFar.toString();
        soFar.setLength(0);
        return str;
    }
}

public class Reverso {
    public static String[] getReversedWords(String sentence) {
        ArrayList &lt String &gt strings = new ArrayList &lt String &gt();
        ReverseBuffer rb = new ReverseBuffer();
        for(int i = 0;i &lt sentence.length();i++) {
            char current = sentence.charAt(i);
            if(current == ' ') {
                strings.add(rb.getReversedString());
            }
            else {
                rb.add(current);
            }
        }
        strings.add(rb.getReversedString());
        Collections.reverse(strings);
        return (String[])strings.toArray(new String[0]);
    }

    public static void main(String[] args) {
        String cSentence = "The rain in Spain falls mostly on the";
        String words[] = Reverso.getReversedWords(cSentence);
        for(String word : words) {
            System.out.println(word);
        }
    }
}

РЕДАКТИРОВАТЬ: пришлось снова вызвать getReversedString после цикла.

Надеюсь, это поможет!

0 голосов
/ 02 февраля 2009

Это потому, что вам нужно присвоить возврат concat чему-либо:

stringOut=stringOut.concat(word)

Строки в Java (и .net) являются неизменяемыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...