是否有一种简单的方法来修剪字符串的最后三个字符?

本文关键字:最后 字符串 三个 修剪 字符 方法 一种 是否 简单 | 更新日期: 2023-09-27 18:05:13

我有这样的字符串:

var a = "abcdefg";
var b = "xxxxxxxx";

字符串总是大于5个字符。

现在我需要修剪掉最后3个字符。有一些简单的方法,我可以用c#做到这一点吗?

是否有一种简单的方法来修剪字符串的最后三个字符?

一般情况下可以直接使用

result = s.Substring(0, s.Length-3);

从字符串中删除最后三个字符。

或者如Jason所建议的Remove是另一种选择:

result = s.Remove(s.Length-3)

遗憾的是,unicode字符串可能存在一些问题:

  • 一个unicode码点可以由多个char组成,因为字符串的编码是UTF-16(参见代理对)。这只发生在基本平面之外的字符,即代码点>2^16的字符。如果你想支持中文,这是相关的。
  • 字形(图形符号)可以由多个代码点组成。例如,ä可以写成a后接¨
  • 从右向左书写的行为可能也不是你想要的

你想要String.Remove(Int32)

删除字符串中从指定的字符开始的所有字符位置,并继续到最后一个位置。

如果您想按照druttka的回答执行验证,我建议创建一个扩展方法

public static class MyStringExtensions
{
  public static string SafeRemove(this string s, int numCharactersToRemove)
  {
    if (numCharactersToRemove > s.Length)
    {
      throw new ArgumentException("numCharactersToRemove");
    }
    // other validation here
    return s.Remove(s.Length - numCharactersToRemove);
  }
}
var s = "123456";
var r = s.SafeRemove(3); //r = "123"
var t = s.SafeRemove(7); //throws ArgumentException
string a = "abcdefg";
a = a.Remove(a.Length - 3);
string newString = oldString.Substring(0, oldString.Length - 4);

如果你真的只需要剪掉最后3个字符,你可以这样做

string a = "abcdefg";
if (a.Length > 3)
{
  a = a.Substring(0, a.Length-3);
}
else
{
  a = String.Empty;
}