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