从字符串末尾派生字符串

本文关键字:字符串 派生 | 更新日期: 2023-09-27 18:00:09

我需要从字符串末尾删除两个字符。

因此:

string = "Hello Marco !"

必须是

Hello Marco

我该怎么做?

从字符串末尾派生字符串

你可以做:

string str = "Hello Marco !";
str = str.Substring(0, str.Length - 2);
s = s.Substring(0, Math.Max(0, s.Length - 2))

包括长度小于2 的情况

C#8引入了允许您编写的索引和范围

str[^2..]

这相当于

str.Substring(str.Length - 2, 2)

事实上,这几乎正是编译器将生成的内容,因此没有开销。

请注意,如果范围不在字符串内,则会得到一个ArgumentOutOfRangeException

怎么样

string s = "Hello Marco !";
s = s.Substring(0, s.Length - 2);

我将为不需要的字符修剪末尾:

s = s.TrimEnd(' ', '!');

以确保它即使在更大的空间下也能工作。或者,如果你想确保它始终有效,那就更好了,因为输入文本似乎来自用户:

Regex r = new Regex(@"(?'purged'('w|'s)+'w)");
Match m = r.Match("Hello Marco   !!");
if (m.Success)
{
    string result = m.Groups["purged"].Value;
}

有了这个你会更安全。基于必须删除最后两个字符这一事实的清除太弱了。

是否检查了MSDN文档(或IntelliSense)?String.Substring方法怎么样?

您可以使用Length属性获取长度,从中减去2,然后返回从开始到结束的2个字符的子字符串。例如:

string str = "Hello Marco !";
str = str.Substring(0, str.Length - 2);

如果字符串数量未知,您可以通过执行s=s.TrimEnd('','!').Trim();

你考虑过使用正则表达式吗?如果您只想允许使用字母数字字符,您可以使用regex来替换符号,What-If而不是!你得到了%?

试试这个:

var s = "Hello Marco !";
var corrected = s.Substring(0, s.Length - 2);
string s = "Hello Marco !";
s = s.Remove(s.length - 2, 2);