Как изменить порядок слов в строке?
Я настоящий Новичок, и пока я нашел вопрос и ответ довольно похожий (Winforms C# изменить порядок текста строки) Я по-прежнему нужна помощь с этим, пожалуйста, особенно из-за пункта 3 ниже, что делает его немного более сложным.
строка состоит из 3 'слов', порядок которых необходимо изменить. Строка всегда имеет один и тот же шаблон: "WordOne WordTwo WordThree" - некоторые примеры: "Car Storage Sydney", "Boat Storage Melbourne" и "Caravan Storage Brisbane".
каждое "слово" всегда отделено одним пробелом. Как я понимаю, это будет использоваться для разделения переменной, а затем ее можно будет переформатировать для достижения желаемого изменения порядка (см. 4 ниже)
вот где это становится немного сложнее: 3-е "слово" иногда на самом деле два слова, то есть "слово три" вместо "WordThree", возможно, лучше объяснить другим примером: "золото для хранения лодок Берег"
желаемое изменение порядка - " 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]);
надеюсь, что это помогает!