编写一个反转字符串中单词顺序的函数?

时间:2012-05-09 20:35:00

标签: java

我正在读“暴露编程访谈”一书,以下问题对我来说很有趣:

  

编写一个反转字符串中单词顺序的函数。对于   例如,你的函数应该转换字符串“Do or do not,   没有尝试。“试试。”不,没有,做或做“。假设全部   单词是空格分隔的,并将标点符号与字母相同。

包含此图像以帮助设计算法:

enter image description here

在JAVA中实现此功能的最有效方法是什么?

6 个答案:

答案 0 :(得分:5)

final List<String> a = Arrays.asList("Do or do not, there is no try.".split("\\s+"));
Collections.reverse(a);
final Iterator<String> it = a.iterator();
final StringBuilder b = new StringBuilder(it.next());
while (it.hasNext()) { b.append(" "); b.append(it.next()); }
System.out.println(b);

答案 1 :(得分:2)

根据空格分割单词。将单词放入堆叠中,并在到达字符串末尾时弹出单词。

 //push elements onto stack
 for(int k =0; k < strtest.length ; k++)
 {
      if(strtest[k]!=null)
      {
           stack.push(strtest[k]);
      }
 }
 StringBuffer b1 = new StringBuffer("");
 // pop and put in stringbuffer
 while(!stack.isEmpty())
 {
     b1 = b1.append(stack.pop());
     b1.append(" ");
 }

答案 2 :(得分:1)

嗯,我希望这不是一个家庭作业,但这是一种方法:

String input = "piglet quantum";
String[] words = input.split(" ");
String result = "";
for(String word : words) {
  result = word + " " + result;
}
// This is to remove the extra space (sorry!)
result = result.substring(0, result.length() - 1);

但这并不严格遵循图像中描述的方法。他们希望您将单词视为数组,因此他们可能会让您使用substring()charAt()来处理此问题。

答案 3 :(得分:1)

这是一种非常直接的方法:

String theInput = "Do or do not, there is no try.”;

String[] wordArray = theInput.split(" ");
String[] reverseWordArray = new String[wordArray.length];

int j = 0;
for (int i = wordArray.length; i > 0; i --) {
  reverseWordArray[j++] = wordArray[i-1];
}

答案 4 :(得分:0)

这是一种低级(-er)级别的方式(我认为):

String in = "piglet quantum";
String out = "";

for(int i = in.length()-1; i >= 0; i+=0) {
  out += in.substring(in.lastIndexOf(" ", i-1), i)+" ";
  i = in.lastIndexOf(" ", i-1);
}

out.substring(0, out.length()-1);

就像我说的,不确定这是否有效,但我认为它会。

如果有人提出建议,我不知道如何处理for中的最后一个条件。它不应该做任何事情。

答案 5 :(得分:0)

BreakIterator也是一个选项:

import java.text.BreakIterator;

public class ReverseWord {

    public static void main(String[] args) {
        String source = "piglet quantum";
        BreakIterator boundary = BreakIterator.getWordInstance();
        boundary.setText(source);
        int end = boundary.last();
        StringBuilder sb = new StringBuilder();
        for (int start = boundary.previous(); start != BreakIterator.DONE; end = start, start = boundary.previous()) {
            sb.append(source.substring(start, end));
        }
        String reversed = sb.toString();
        System.err.println("'" + reversed + "'");
    }
}

它输出:

  

'量子仔'