Как изменить порядок слов в строке?

Я настоящий Новичок, и пока я нашел вопрос и ответ довольно похожий (Winforms C# изменить порядок текста строки) Я по-прежнему нужна помощь с этим, пожалуйста, особенно из-за пункта 3 ниже, что делает его немного более сложным.

  1. строка состоит из 3 'слов', порядок которых необходимо изменить. Строка всегда имеет один и тот же шаблон: "WordOne WordTwo WordThree" - некоторые примеры: "Car Storage Sydney", "Boat Storage Melbourne" и "Caravan Storage Brisbane".

  2. каждое "слово" всегда отделено одним пробелом. Как я понимаю, это будет использоваться для разделения переменной, а затем ее можно будет переформатировать для достижения желаемого изменения порядка (см. 4 ниже)

  3. вот где это становится немного сложнее: 3-е "слово" иногда на самом деле два слова, то есть "слово три" вместо "WordThree", возможно, лучше объяснить другим примером: "золото для хранения лодок Берег"

  4. желаемое изменение порядка - " WordThree WordOne WordTwo "(в основном, просто перемещение" WordThree "сзади спереди), поэтому, используя те же примеры, что и в 1 выше, конечный результат будет" хранение автомобиля в Сиднее"," хранение лодки в Мельбурне "и"хранение каравана в Брисбене". И хитрый, основанный на Иногда двухсловном "слове три", как показано в 3. выше, будет "Gold Coast Boat Storage"

надеюсь, я объяснил это достаточно хорошо.

за исключением проблемы, описанной в разделе 3. выше, я считаю, что это должно быть что-то вроде этого, просто моя грубая попытка новичка в коде:

string wordsBefore = "WordOne WordTwo WordThree";
string[] wordsWorking = wordsBefore.Split(new string[]{" "});
string wordsAfter = ("{0} {1} {2}", wordsWorking[2], wordsWorking[0], wordsWorking[1]);

Я думаю, что это достаточно близко?

но, конечно, из-за проблемы, как описано в 3. выше, должен быть дополнительный код для обнаружения, когда "WordThree" содержит два слова и каким-то образом обрабатывать их как одно слово. Думаю, ты понимаешь, о чем я!

С нетерпением ждем помощи!

5 ответов


вы можете сказать Split чтобы дать вам только определенное количество результатов:

string wordsBefore = "WordOne WordTwo Word Three";
string[] wordsWorking = wordsBefore.Split(new [] {' '}, 3);
string wordsAfter = string.Format("{0} {1} {2}", 
                wordsWorking[2], wordsWorking[0], wordsWorking[1]);

// result: "Word Three WordOne WordTwo"

или если вы хотите быть умным с String.Format:

string wordsBefore = "WordOne WordTwo Word Three";
string[] wordsWorking = wordsBefore.Split(new [] {' '}, 3);
string wordsAfter = string.Format("{2} {0} {1}", wordsWorking);

string wordsBefore = "WordOne WordTwo WordThree";
string[] wordsWorking = wordsBefore.Split();
string wordsAfter = ("{0} {1} {2}", string.Join(" ", wordsWorking.Skip(2)), wordsWorking[0], wordsWorking[1]);

сохранить его простым.

string wordsBefore = "WordOne WordTwo WordThree";
string[] wordsWorking = wordsBefore.Split(new string[]{" "});
string word1 = wordsWorking[0];
string word2 = wordsWorking[1];
string word3 = wordsWorking[2];

if (wordsWorking.length == 4)
   word3 = word3 + " " + wordsWorking[3];

string wordsAfter = ("{0} {1} {2}", word3 word1, word2);

const string wordsBefore = "WordOne WordTwo Word Three";
string[] wordsWorking = wordsBefore.Split();
var thirdWord = wordsWorking.Skip(2).Aggregate((s, s1) => s + " " + s1);    
string wordsAfter = string.Format("{0} {1} {2}", thirdWord, wordsWorking[0], wordsWorking[1]);

вот мой пример:

string text = "word one<splittag>word two and some other words<splittag>word three with   some text";
        string[] words = text.Split(new string[] { "<splittag>" }, StringSplitOptions.None);
        Label1.Text = String.Format("{2},{0},{1}", words[2], words[0], words[1]);

надеюсь, что это помогает!