0

这听起来可能很愚蠢,但是如果字符串看起来像这样"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) + "...";
    }
}
4

10 回答 10

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,您需要在代码中进行处理。

于 2012-09-07T07:08:25.577 回答
1

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

相反,会做的只是

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

返回:

x :    'r'
index: 42
于 2012-09-07T07:02:28.560 回答
1

试试这个:

        string s = "string with whitespace after last character    ";
        int index = s.Length - s
            .ToCharArray()
            .Reverse()
            .TakeWhile(c => c == ' ')
            .Count();
于 2012-09-07T07:14:59.907 回答
0

如果字符串在第一个字符之前没有任何空格,yourString.Trim().Length -1则应完成此操作。

于 2012-09-07T06:55:45.550 回答
0

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

于 2012-09-07T06:55:52.610 回答
0

为什么不修剪你的字符串

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

希望能帮助到你

于 2012-09-07T06:57:28.877 回答
0

也许这个?

String s = "string with whitespace after last character  ";
int lastCharIndex = s.Length - (s.TrimEnd().Length);
于 2012-09-07T06:59:12.170 回答
0

只是这个。不需要 Linq 或 Regex。但是TrimEnd(),不是Trim(),而且您无需考虑字符串开头是否有空格。

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

如果 OP 真的想为此使用正则表达式,那么这是我的即兴创作:

        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();
于 2012-09-07T07:07:25.297 回答
0

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

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

于 2014-07-15T08:41:40.330 回答
-1

假设末尾的其他空白字符(例如制表符或换行符)也被忽略并不重要,只需使用修剪:

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

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

于 2012-09-07T06:56:03.560 回答