如何从字符串中删除前10个字符?


92

如何忽略字符串的前10个字符?

输入:

str = "hello world!";

输出:

d!

9
string.Substring(9); 其中9是开始索引
Waqas

请记住首先检查该字符串是否至少有10个字符,否则您将获得异常。
乔纳森

为什么子字符串不支持(startIndex,endindex)?每次我们都要计算长度时.. :-(
Sangram Nandkhile 2011年

1
@Waqas:实际上它的str.Substring(10),所述参数是所述位置从其中要提取的子串开始
的Răzvan弗拉维乌斯熊猫

Answers:


92
str = "hello world!";
str.Substring(10, str.Length-10)

您将需要执行长度检查,否则会引发错误


214

str = str.Remove(0,10); 删除前10个字符

要么

str = str.Substring(10); 创建一个从第11个字符开始到该字符串末尾的子字符串。

为了您的目的,它们应该工作相同。


16

正如其他人指出的那样,子字符串可能是您想要的。但是只是为混合添加了另一个选择...

string result = string.Join(string.Empty, str.Skip(10));

您甚至不需要检查此长度!:)如果少于10个字符,则会得到一个空字符串。


为了获得更好的可读性,可以使用“”。它的编译与string完全相同。这几天空了。
PRMan

10

Substring 有两种重载方法:

public string Substring(int startIndex);//The substring starts at a specified character position and continues to the end of the string.

public string Substring(int startIndex, int length);//The substring starts at a specified character position and taking length no of character from the startIndex.

因此,对于这种情况,您可以使用下面的第一种方法:

var str = "hello world!";
str = str.Substring(10);

这里的输出是:

d!

如果您可以通过检查其长度来应用防御性编码。


5

Substring参数称为startIndex。根据您要开始的索引进行设置。


3

您可以使用以下行删除字符,

:- 首先检查String是否有足够的字符要删除,例如

   string temp="Hello Stack overflow";
   if(temp.Length>10)
   {
    string textIWant = temp.Remove(0, 10);
   }


1

您可以使用带单个参数的方法Substring方法,该参数是从其开始的索引。

在下面的代码中,我处理的情况是长度小于所需的起始索引并且长度为零。

string s = "hello world!";
s = s.Substring(Math.Max(0, Math.Min(10, s.Length - 1)));

当前,如果字符串的长度小于10个字符,它将返回字符串的最后一个字符。
拉兹万·弗拉维斯·熊猫

1

对于:

var str = "hello world!";

要获得没有前10个字符的结果字符串,并且如果字符串的长度小于或等于10,则为空字符串,可以使用:

var result = str.Length <= 10 ? "" : str.Substring(10);

要么

var result = str.Length <= 10 ? "" : str.Remove(0, 10);

优选第一变体,因为它仅需要一个方法参数。


1

无需在Substring方法中指定长度。因此:

string s = hello world;
string p = s.Substring(3);

p 将会:

“ lo world”。

您需要满足的唯一例外是ArgumentOutOfRangeExceptionif startIndex小于零或大于此实例的长度。


0

从C#8开始,您只需使用范围运算符即可。这是处理此类案件的更有效,更好的方法。

string AnString = "Hello World!";
AnString = AnString[10..];

C# 8定位时不支持.NET Framework
l33t

0

调用SubString()分配一个新的字符串。为了获得最佳性能,应避免额外分配。首先,C# 7.2您可以利用Span模式。

定位时.NET Framework,请包括System.Memory NuGet软件包。对于.NET Core项目,此功能开箱即用。

static void Main(string[] args)
{
    var str = "hello world!";
    var span = str.AsSpan(10); // No allocation!

    // Outputs: d!
    foreach (var c in span)
    {
        Console.Write(c);
    }

    Console.WriteLine();
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.