为什么 C# 的 TrimEnd() 函数表现如下?
Why TrimEnd() function of C# behaves like following?
一个简单的代码片段如下:
public static void Main()
{
string str = "IsRecorded<code>0</code>";
str = str.TrimEnd("<code>0</code>".ToCharArray());
Console.WriteLine(str);
}
我得到的输出字符串是IsRecor
。为什么 TrimEnd
函数从字符串中剥离 ded
,而它应该只剥离 <code>0</code>
。另外,如果我将 str
减少到 IsRec
,那么它会给出 IsR
作为输出。为什么会这样?
TrimEnd
的参数指定 字符集 为 trimmed。 后缀并不意味着trimmed.
所以你说你想 trim 集合 { '<', 'c', 'o', 'd', 'e', '>', '0', '/' }
中的任何字符。字母 "ded" 都在那个集合中,所以它们被 trimmed.
如果要删除后缀,请不要使用 TrimEnd
。使用这样的东西:
public static string RemoveSuffix(string input, string suffix) =>
input.EndsWith(suffix, StringComparison.Ordinal)
? input.Substring(0, input.Length - suffix.Length)
: input;
(在某些情况下,字符串比较部分对于避免 "interesting" 特定于文化的影响很重要。它基本上会尽可能进行最简单的匹配。)
试试这个:
string str = "IsRecorded<code>0</code>";
str = str.Substring(0, str.IndexOf("<code>0</code>"));
Console.WriteLine(str);
您可以使用.LastIndexOf() & Remove()
删除末尾的字符串
string str = "IsRecorded<code>0</code>";
str = str.Remove(str.LastIndexOf("<code>0</code>"));
.LastIndexOf(string param) : This will find index of last occurrence
of specified string.
.Remove(int startIndex) : Remove string from given index
另一种解决方案可能是:
string str = "IsRecorded<code>0</code>";
str = str.Replace("<code>0</code>", "");
Console.WriteLine(str);
PS:我知道不会trim只是结束部分,但如果这不是问题那么可以使用
一个简单的代码片段如下:
public static void Main()
{
string str = "IsRecorded<code>0</code>";
str = str.TrimEnd("<code>0</code>".ToCharArray());
Console.WriteLine(str);
}
我得到的输出字符串是IsRecor
。为什么 TrimEnd
函数从字符串中剥离 ded
,而它应该只剥离 <code>0</code>
。另外,如果我将 str
减少到 IsRec
,那么它会给出 IsR
作为输出。为什么会这样?
TrimEnd
的参数指定 字符集 为 trimmed。 后缀并不意味着trimmed.
所以你说你想 trim 集合 { '<', 'c', 'o', 'd', 'e', '>', '0', '/' }
中的任何字符。字母 "ded" 都在那个集合中,所以它们被 trimmed.
如果要删除后缀,请不要使用 TrimEnd
。使用这样的东西:
public static string RemoveSuffix(string input, string suffix) =>
input.EndsWith(suffix, StringComparison.Ordinal)
? input.Substring(0, input.Length - suffix.Length)
: input;
(在某些情况下,字符串比较部分对于避免 "interesting" 特定于文化的影响很重要。它基本上会尽可能进行最简单的匹配。)
试试这个:
string str = "IsRecorded<code>0</code>";
str = str.Substring(0, str.IndexOf("<code>0</code>"));
Console.WriteLine(str);
您可以使用.LastIndexOf() & Remove()
删除末尾的字符串
string str = "IsRecorded<code>0</code>";
str = str.Remove(str.LastIndexOf("<code>0</code>"));
.LastIndexOf(string param) : This will find index of last occurrence of specified string.
.Remove(int startIndex) : Remove string from given index
另一种解决方案可能是:
string str = "IsRecorded<code>0</code>";
str = str.Replace("<code>0</code>", "");
Console.WriteLine(str);
PS:我知道不会trim只是结束部分,但如果这不是问题那么可以使用