0

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

编写一个反转字符串中单词顺序的函数。例如,您的函数应该转换字符串“Do or do not, there is no try”。去“尝试。不,没有,做或做”。假设所有单词都是空格分隔的,并且将标点符号视为字母。

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

在此处输入图像描述

在 JAVA 中实现这一点的最有效方法是什么?

4

6 回答 6

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);
于 2012-05-09T20:44:09.603 回答
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(" ");
 }
于 2012-05-09T21:30:02.250 回答
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()处理它。

于 2012-05-09T20:40:50.353 回答
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];
}
于 2012-05-09T20:47:42.697 回答
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如果有人有建议,我不知道如何处理最后一个条件。它不应该做任何事情。

于 2012-05-09T20:51:20.397 回答
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 + "'");
    }
}

它输出:

'量子小猪'

于 2012-05-09T21:12:38.733 回答