反向词,但点应在末尾

时间:2019-04-12 14:49:57

标签: c#

我有句话: “我爱结婚。” 我想得到: “嫁给我吧。” (末尾的点)

我该怎么做?

public static string ReverseWords(string originalString)
{
   return string.Join(" ", originalString.Split(' ').Where(x => !string.IsNullOrEmpty(x)).Reverse());
}

4 个答案:

答案 0 :(得分:1)

您可以删除最后一个'。分裂之前。

演示:

public static string ReverseWords(string originalString)
{
    var input = originalString.EndsWith(".") ? originalString.Remove(originalString.Length - 1) : originalString; // will trim ending '.'
    return string.Join(" ", input.Split().Reverse()) + ".";
}

Try it online!

答案 1 :(得分:0)

对于单个句子,请删除该点并在结尾处再次附加。 要删除点,您可以使用TrimEnd,它将删除字符串末尾的所有点。如果没有,则什么也不会删除:

    public static string ReverseWords(string originalString)
    {
        originalString = originalString.TrimEnd('.');
        originalString = string.Join(" ", originalString.Split(' ').Where(x => !string.IsNullOrEmpty(x)).Reverse());

        return originalString + ".";
    }

对于多句子,您可以在.处拆分输入字符串,这将为您提供不带点的句子数组。然后,您只需反转每个部分,添加一个点并将它们放回一起(我使用StringBuilder来做到这一点):

    public static string ReverseWordsMultiple(string originalString)
    {
        String[] sentences = originalString.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);

        StringBuilder builder = new StringBuilder();

        foreach (String senctence in sentences)
        {
            builder.Append(string.Join(" ", senctence.Split(' ').Where(x => !string.IsNullOrEmpty(x)).Reverse()));
            builder.Append(". ");
        }

        return builder.ToString().TrimEnd();
    }

答案 2 :(得分:0)

尝试一下。为了便于阅读,我将其分为几条。

var words = originalString.Split(new [] {' ', '.'}, StringSplitOptions.RemoveEmptyEntries).Reverse();

这会使您的单词相反,并避免了使用Where子句。然后加入他们与句点:

return string.Join(' ', words) + '.';

答案 3 :(得分:0)

分两个步骤进行操作,首先拆分.

return 
    string.Join(".",
         originalString.Split('.')
            .ToList()
            .Select(s => string.Join(" ", s.Split(' ').Where(x => !string.IsNullOrEmpty(x)).Reverse())));