找到后面有空格的字符串的最后一个字符

时间:2012-09-07 06:53:23

标签: c# regex string

这可能听起来很愚蠢,但是如果字符串看起来像"string with white-space after last character ",我怎么能找到字符串中的最后一个字符索引,如果它是一致的,只有1就没有问题,但有时它可能是2或3个白色空间

修改 我无法将当前字符串修剪为新字符串,因为最后一个字符的索引不正确。我希望保持字符串不变

这就是我得到的原因

string description = "Lorem Ipsum is simply dummy text of the printing and typesetting indu. Lorem Ipsum has ben indusry s tandard dummy text ever since the 1500s.";
description = Regex.Replace(description, @"(?></?\w+)(?>(?:[^>'""]+|'[^']*'|""[^""]*"")*)>", String.Empty);
if (description.Count() > 101)
{
    description = description.Substring(0, 101);
    if (description.GetLast() != " ")
    {                    
        description = description.Substring(0, description.LastIndexOf(" ", 101)) + "...";
    }
    else
    {
        //here is should find the last character no mather how many whitespaces
        description = description.Substring(0, description.Length - 1) + "...";
    }
}

10 个答案:

答案 0 :(得分:2)

为了完整性,这里有一个使用正则表达式的解决方案(我并没有声称它比其他提议的解决方案更好):

var text = "string with whitespace after last character  ";
var regex = new Regex(@"\s*$");
var match = regex.Match(text);
var lastIndex = match.Index - 1;

请注意,如果字符串为空,lastIndex将为-1,您需要在代码中处理此问题。

答案 1 :(得分:1)

此处的所有答案都是修剪字符串,因此请创建一个包含移位索引的新字符串,因此最终结果将是错误索引原始字符串。

反而会做什么,只是

"string with whitespace after last character ".ToCharArray().
          Select((x,i)=> new {x,i}).Where(ch=>ch.x != ' ').Last();

返回:

x :    'r'
index: 42

答案 2 :(得分:1)

试试这个:

        string s = "string with whitespace after last character    ";
        int index = s.Length - s
            .ToCharArray()
            .Reverse()
            .TakeWhile(c => c == ' ')
            .Count();

答案 3 :(得分:0)

如果字符串在第一个字符之前没有任何空格,yourString.Trim().Length -1应该填写此字符。

答案 4 :(得分:0)

使用trim函数并获取该字符串的最后一个索引..

答案 5 :(得分:0)

为什么不修剪你的字符串

string abc = "string with whitespace after last character ";
abc = abc.trim();

希望有所帮助

答案 6 :(得分:0)

也许这个?

String s = "string with whitespace after last character  ";
int lastCharIndex = s.Length - (s.TrimEnd().Length);

答案 7 :(得分:0)

就是这样。没有必要使用Linq或Regex。但是TrimEnd(),而不是Trim(),并且您不需要考虑字符串开头是否有空格。

string s = "string with whitespace after last character  ";
int lastCharIndex = s.TrimEnd().Length - 1;

如果OP真的想要使用Regex,那么这就是我的即兴创作:

        string text = "string with whitespace after last character  ";
        Match m = Regex.Match(text, @"^(.*)(\w{1})\s*$");
        if (m.Success)
        {
            int index = m.Groups[1].Length;
            Console.WriteLine(text[index]);
            Console.WriteLine(index);
        }

        Console.ReadLine();

答案 8 :(得分:0)

使用Array.FindLastIndex搜索不等于空格的最后一个字符:

Array.FindLastIndex(str.ToCharArray(), ch => !Char.IsWhiteSpace(ch))

答案 9 :(得分:-1)

假设最后还忽略了其他whitespace characters(例如制表符或换行符)并不重要,只需使用trim:

String s = "string with whitespace after last character  ";
int lastChar = s.TrimEnd().Length-1;

请注意原始字符串s保持不变(请参阅TrimEnd() documentation)。