子串直到字符结束

时间:2015-04-21 23:02:30

标签: c# .net

如何将字符子字符串子串直到文本末尾,字符串的长度总是在变化?我需要在ABC之后获得所有东西 样本是:

ABC123
ABC13245
ABC123456
ABC1

2 个答案:

答案 0 :(得分:12)

string search = "ABC"; 
string result = input.Substring(input.IndexOf(search) + search.Length);

答案 1 :(得分:5)

答案

var startIndex = "ABC".Length;
var a = "ABC123".Substring(startIndex); // 123
var b = "ABC13245".Substring(startIndex); // 13245
var c = "ABC123456".Substring(startIndex); // 123456
car d = "ABC1".Substring(startIndex); // 1

说明

使用Substring() - 更快

string.Substring(int startIndex)返回startIndex之后的所有字符。这是一种可以使用的方法。

public static string SubstringAfter(string s, string after)
{
    return s.Substring(after.Length);
} 

使用Remove() - 略慢

在删除以索引count处的字符开头的start个字符后,

string.Remove(int start, int count)会返回一个新字符串。

public static string SubstringAfter(string s, string after)
{
    return s.Remove(0, after.Length);
}

Substring()IndexOf() - 慢慢

如果您的字符串以ABC之外的其他内容开头,如果您希望在ABC之后获取所有内容,那么,正如Greg正确回答的那样,您将使用IndexOf()

var s = "123ABC456";
var result = s.Substring(s.IndexOf("ABC") + "ABC".Length)); // 456

Proof

这是一个演示,它也显示哪个是最快的。

using System;
public class Program
{
    public static void Main()
    {
        var result = "ABC123".Substring("ABC".Length);
        Console.WriteLine(result);
        Console.WriteLine("---");

        Test(SubstringAfter_Remove);
        Test(SubstringAfter_Substring);
        Test(SubstringAfter_SubstringWithIndexOf);
    }

    public static void Test(Func<string, string, string> f)
    {
        var array = 
            new string[] { "ABC123", "ABC13245", "ABC123456", "ABC1" };

        var sw = new System.Diagnostics.Stopwatch();
        sw.Start();
        foreach(var s in array) {
            Console.WriteLine(f.Invoke(s, "ABC"));
        }
        sw.Stop();
        Console.WriteLine(f.Method.Name + " : " + sw.ElapsedTicks + " ticks.");
        Console.WriteLine("---");
    }

    public static string SubstringAfter_Remove(string s, string after)
    {
        return s.Remove(0, after.Length);
    }

    public static string SubstringAfter_Substring(string s, string after)
    {
        return s.Substring(after.Length);       
    }

    public static string SubstringAfter_SubstringWithIndexOf(string s, string after)
    {
        return s.Substring(s.IndexOf(after) + after.Length);        
    }    
}

输出

123
---
123
13245
123456
1
SubstringAfter_Remove : 2616 ticks.
---
123
13245
123456
1
SubstringAfter_Substring : 2210 ticks.
---
123
13245
123456
1
SubstringAfter_SubstringWithIndexOf : 2748 ticks.
---