Получить части строки и объединить их в C #? - PullRequest
3 голосов
/ 09 декабря 2011

У меня есть такая строка: C: \ Projects \ test \ независимо от того, \ files \ media \ 10 \ 00 \ 00 \ 80 \ test.jpg

Теперь я хочу динамически объединить последние 4 числа, в данном случае это 10000080 как результат. Моя идея заключалась в том, чтобы разделить это и каким-то образом объединить их, есть ли более простой способ? Я не могу полагаться на индекс массива, потому что путь может быть длиннее или короче.

Есть хороший способ сделать это?

Спасибо:)

Ответы [ 8 ]

4 голосов
/ 09 декабря 2011

Компактный способ с использованием 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
2 голосов
/ 09 декабря 2011

Использовать строку. Разделить

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
2 голосов
/ 09 декабря 2011

Вы можете положиться на индекс массива, если последняя часть всегда является именем файла.так как последняя часть всегда

имя_массива [имя_массива.length - 1]

, 4 части до этого можно найти по

имя_массива [имя_массива.length - 2]

имя-массива [имя-массива-длины - 3]

и т. Д.

1 голос
/ 09 декабря 2011

, чтобы найти номер, который вы можете использовать regex:

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

используйте concat all inner Group ([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());
    }
}
1 голос
/ 09 декабря 2011
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();
1 голос
/ 09 декабря 2011
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 (исключая имя файла), и вернуться к откату к исходному порядку, затем выполнить конкат.

1 голос
/ 09 декабря 2011

Использование 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"

1 голос
/ 09 декабря 2011

Если вы всегда хотите объединить последние четыре числа, разделите строку (используйте \ в качестве разделителя), начните отсчет с последней части и возьмите 4 числа или почти 4 последние части.

ЕслиВы хотите взять все цифр, просто отсканируйте строку от начала до конца и скопируйте только цифры в новую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...