所以我正在做一些标准的编程面试问题,并遇到了这个问题:
字符串中的反向字(单词由一个或多个空格分隔)
我认为使用lambda表达式来做它会很有趣,但我发现很难做到正确而且我的解决方案感觉有点笨拙和hacky。所以现在我的问题是:是否存在比我更惯用的解决方案?
public static String reverseWordsInString(String str)
{
StringBuilder sb = new StringBuilder();
Stream.of(str.split(" ")).forEach(
word -> sb.append(reverseWord(word, !str.endsWith(word)))
);
return sb.toString();
}
public static String reverseWord(String str, boolean trailingSpace)
{
StringBuilder sb = new StringBuilder();
for(int i = str.length() - 1; i >= 0; i--)
{
sb.append(str.charAt(i));
}
sb.append(trailingSpace ? " " : "");
return sb.toString();
}
答案 0 :(得分:3)
您的任务描述有点含糊不清。我无法识别你是否必须反转单词或反转单词的字符。但这里有两种解决方案:
public static String reverseWordsInString(String str) {
return String.join(" ", Pattern.compile(" +").splitAsStream(str)
.collect(LinkedList::new, LinkedList::addFirst, (a,b)->a.addAll(0, b)));
}
public static String reverseWordCharacters(String str) {
return Pattern.compile(" +").splitAsStream(str)
.map(word->new StringBuilder(word).reverse())
.collect(Collectors.joining(" "));
}
第一个将反转字符串的单词,因此reverseWordsInString("this is an example")
将返回example an is this
,第二个将反转每个单词的字符,因此reverseWordCharacters("this is an example")
会产生siht si na elpmaxe
}。
答案 1 :(得分:2)
关注pvg评论Java 8 stream reverse order回答这个问题,但很难从问题本身中找出它,因为它引用了整数。
所以根据Venkata Raju在上面回答:
Arrays.stream(sentance.split("\\s+"))
.collect(Collectors.toCollection(LinkedList::new))
.descendingIterator().forEachRemaining(System.out::println);
将结果拆分并收集到中间链表并按相反顺序迭代
答案 2 :(得分:0)
以下内容应在python中起作用,其中message是消息
def reverse_words(message):
return ' '.join([x[::-1] for x in message[::-1].split(' ')])
答案 3 :(得分:0)
另一种没有模式或正则表达式的解决方案。这是把句子中的单词倒过来,而不是单词中的字符。
public static String reverseWordsInString(String str) {
return String.join(" ", Stream.of(str.split(" "))
.collect(LinkedList::new, LinkedList::addFirst, (a,b)->a.addAll(0, b)));
}