繁体   English   中英

使用 lambda 表达式反转字符串中的单词

[英]Reverse words in a string using lambda expressions

所以我在做一些标准的编程面试问题时遇到了这个问题:

反转字符串中的单词(单词由一个或多个空格分隔)

我认为使用 lambda 表达式会很有趣,但我发现很难做到正确,而且我的解决方案感觉有点笨拙和笨拙。 所以现在我的问题是:有没有比我更惯用的解决方案?

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();
}

你的任务描述有点模棱两可。 我不知道你是要颠倒单词还是颠倒单词的字符 但这里有两种解决方案:

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

按照 pvg remark Java 8 stream reverse order回答这个问题,但很难从问题本身弄清楚,因为它指的是整数。
所以基于上面的 Venkata Raju 回答:

Arrays.stream(sentance.split("\\s+"))
         .collect(Collectors.toCollection(LinkedList::new))
         .descendingIterator().forEachRemaining(System.out::println);

将结果拆分并收集到中间链表中并以相反的顺序对其进行迭代

以下应该在 python 中工作,其中 message 是消息

def reverse_words(message):
    return ' '.join([x[::-1] for x in message[::-1].split(' ')])

没有模式或正则表达式的另一种解决方案。 这是将句子中的单词颠倒,而不是单词中的字符。

public static String reverseWordsInString(String str) {
  return String.join(" ", Stream.of(str.split(" "))
                .collect(LinkedList::new, LinkedList::addFirst, (a,b)->a.addAll(0, b)));
}
String text = "hello how are you abi.";
String output = Arrays.stream(text.split("\\s+"))
                            .reduce("", (a,b) -> new StringBuffer(b).append(" "+a).toString());
System.out.println(output);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM