Манипулирование строкой и расщепление строки - PullRequest
2 голосов
/ 26 февраля 2020
string url = "test:app:https://test@hotmail.co.uk:Test

Мне нужно разделить это, чтобы отобразить следующим образом

string first = "app";
string second = "https://test@hotmail.co.uk:Test";

Я пробовал следующее, но падает на последнее двоеточие.

        string remove= "";
        remove= url.Replace("test:", "");
        string first= remove.Substring(remove.LastIndexOf(':') + 1);
        string second= remove.Substring(0, remove.IndexOf(':'));

Делая это я получить

first = "app";
second = "Test";

Когда мне нужно

first = "app";
second = "https://test@hotmail.co.uk:Test";

Ответы [ 5 ]

3 голосов
/ 26 февраля 2020

Ваше использование LastIndexOf немного шатко.

string url = "test:app:https://test@hotmail.co.uk:Test";

string remove = url.Replace("test:", "");

string first = remove.Substring(0, remove.IndexOf(":"));
string second = remove.Substring(remove.IndexOf(first) + first.Length + 1);

Сначала возьмите app, и мы можем использовать местоположение app, чтобы получить остальную часть строки. Потому что последний индекс : будет таким же, как в :Test. Нам не нужен последний индекс :. Вместо этого мы просто хотим все, что придет после app.

1 голос
/ 26 февраля 2020

Поскольку все имеет префикс test:, вы можете использовать начальную позицию после этого, а затем разделить после первого появления символа :.

const int IndexOfPrefix = 5; // start position after "test:"
string url = "test:app:https://test@hotmail.co.uk:Test";
var indexOfApp = url.IndexOf(':', IndexOfPrefix);
var part1 = url.Substring(IndexOfPrefix, indexOfApp - IndexOfPrefix);
var part2 = url.Substring(indexOfApp + 1);

Console.WriteLine(part1);
Console.WriteLine(part2);
0 голосов
/ 26 февраля 2020

вам нужно изменить переменную с именем «first» на «second» и изменить переменную с именем «second» на «first»

Это ваш код:

string url = "test: app: https://test@hotmail.co.uk: Test ";

        string remove = "";
        remove = url.Replace("test:", "");
        string second = remove.Substring(0, remove.IndexOf(':'));
        string first = remove.Substring(remove.IndexOf(":") + 1);

, и это правильный код:

string url = "test: app: https://test@hotmail.co.uk: тест";

        string remove = "";
        remove = url.Replace("test:", "");
        string first = remove.Substring(0, remove.IndexOf(':'));
        string second = remove.Substring(remove.IndexOf(":") + 1);
0 голосов
/ 26 февраля 2020

Что-то вроде этого должно сработать:

public void ManipulateStrings()
{
    string url = "test:app:https://test@hotmail.co.uk:Test";
    url = url.Replace("test:", "");
    string first = url.Substring(0, url.IndexOf(':'));
    string second = url.Substring(url.IndexOf(':') + 1);

}

Это в основном удалило test: из вашей строки, затем присваивает первое и второе их значения без создания string remove = "" без причины.

0 голосов
/ 26 февраля 2020

Вы можете использовать Split(Char[], Int32), чтобы получить необходимое количество элементов (3: первая нежелательная часть, первая ожидаемая часть и оставшаяся) вместе с Skip() для удаления ненужного:

string url = "test:app:https://test@hotmail.co.uk:Test";

var splitted = url.Split(new [] { ':' }, 3).Skip(1).ToArray();
var first = splitted[0];
var second = splitted[1];

Console.WriteLine(first);
Console.WriteLine(second);

Это выводит

app
https://test@hotmail.co.uk:Test

Другой способ сделать это - использовать регулярные выражения:

Шаблон :(?<first>.*?):(?<second>.*) будет:

  • : искать символы :
  • (?<first>.*?) создает группу с именем first , которая будет соответствовать любому номер любого символа (ленивый)
  • : поиск символов :
  • (?<second>.*) создает группу с именем second , которая будет соответствовать любому числу любого символ (жадный)

Например:

string url = "test:app:https://test@hotmail.co.uk:Test";
var pattern = ":(?<first>.*?):(?<second>.*)";
var regex = new Regex(pattern); // using System.Text.RegularExpressions;
Match match = regex.Match(url);
if (match.Success)
{
    var first = match.Groups["first"].Value;
    var second = match.Groups["second"].Value;
    Console.WriteLine(first);
    Console.WriteLine(second);
}

Это выводит

app
https://test@hotmail.co.uk:Test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...