获取字符串的一部分并将它们组合在C#中?

时间:2011-12-09 08:59:13

标签: c# string

我有一个这样的字符串: C:\ Projects \ test \ whatever \ files \ media \ 10 \ 00 \ 00 \ 80 \ test.jpg

现在,我想要做的是动态组合最后4个数字,在这种情况下,结果是 10000080 。我的想法是分裂这个并以某种方式结合它们,有更简单的方法吗?我不能依赖数组索引,因为路径也可以更长或更短。

有一个很好的方法吗?

谢谢:)

8 个答案:

答案 0 :(得分:4)

使用 string.Join Regex.Split。

的紧凑方式
string text = @"C:\Projects\test\whatever\files\media\10\00\00\80\test.jpg";
string newString = string.Join(null, Regex.Split(text, @"[^\d]"));    //10000080

答案 1 :(得分:2)

如果最后一部分始终是文件名,则可以依赖数组索引。 因为最后一部分总是

array_name [array_name.length - 1]

之前的4个部分可以找到

array_name [array_name.length - 2]

array_name [array_name.length - 3]

答案 2 :(得分:2)

使用字符串。Split

String toSplit = "C:\Projects\test\whatever\files\media\10\00\00\80\test.jpg";
String[] parts = toSplit.Split(new String[] { @"\" });

String result = String.Empty;
for (int i = 5, i > 1; i--)
{
   result += parts[parts.Length - i];
}

// Gives the result 10000080

答案 3 :(得分:1)

如果你总是想要结合最后四个数字,拆分字符串(使用\作为分隔符),从最后一部分开始计数,然后取4个数字,或者几乎最后4个数字。

如果您想要所有数字,只需从头到尾扫描字符串,然后只将数字复制到新字符串。

答案 4 :(得分:1)

使用LINQ:

string path = @"C:\Projects\test\whatever\files\media\10\00\00\80\test.jpg";
var parts = Path.GetDirectoryName(path).Split('\\');
string numbersPart = parts.Skip(parts.Count() - 4)
                          .Aggregate((acc, next) => acc + next);

结果:“10000080”

答案 5 :(得分:1)

string input = "C:\Projects\test\whatever\files\media\10\00\00\80\test.jpg";
string[] parts = toSplit.Split(new char[] {'\\'});
IEnumerable<string> reversed = parts.Reverse();
IEnumerable<string> selected = reversed.Skip(1).Take(4).Reverse();
string result = string.Concat(selected);

想法是提取部分,反转它们以仅保留最后4个(不包括文件名)并重新反转以回滚到初始顺序,然后连续。

答案 6 :(得分:1)

var r = new Regex(@"[^\d+]");

var match = r
    .Split(@"C:\Projects\test\whatever\files\media\10\00\00\80\test.jpg")
    .Aggregate((i, j) => i + j);

return match.ToString();

答案 7 :(得分:1)

找到你可以使用正则表达式的数字:

(([0-9]{2})\\){4}

使用concat所有内部组([0-9]{2})来获取搜索到的号码。

这将始终在给定字符串中的任何位置找到您搜索到的数字。

示例代码:

static class TestClass {
    static void Main(string[] args) {

        string[] tests = { @"C:\Projects\test\whatever\files\media\10\00\00\80\test.jpg",
        @"C:\Projects\test\whatever\files\media\10\00\00\80\some\foldertest.jpg",
        @"C:\10\00\00\80\test.jpg",
        @"C:\10\00\00\80\test.jpg"};

        foreach (string test in tests) {
            int number = ExtractNumber(test);
            Console.WriteLine(number);
        }
        Console.ReadLine();
    }

    static int ExtractNumber(string path) {
        Match match = Regex.Match(path, @"(([0-9]{2})\\){4}");
        if (!match.Success) {
            throw new Exception("The string does not contain the defined Number");
        }

        //get second group that is where the number is
        Group @group = match.Groups[2];

        //now concat all captures
        StringBuilder builder = new StringBuilder();
        foreach (var capture in @group.Captures) {
            builder.Append(capture);
        }

        //pares it as string and off we go!
        return int.Parse(builder.ToString());
    }
}