как проверить, есть ли 4 или более пробелов в строке потока - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь заменить пространство для каналов в текстовом файле, но если есть 4 или более пробелов.мой код до сих пор:

string MyNewFile;
using (StreamWriter sWriter = new StreamWriter(MyNewFile, false, encoding, 1))
{
    using (StreamReader sReplaceReader = new StreamReader(myFile))
    {
        string line, textLine = "";

        while ((line = sReplaceReader.ReadLine()) != null)
        {
            if (line.Contains("    ")>=4 )//if contains 4 or more spaces
            {
                textLine = line.Replace("    ", "|");
            }

            sWriter.WriteLine(textLine);
        }
    } 
}

Моя идея состоит в том, чтобы получить количество пробелов параметром в методе, но я не знаю, как поместить что-то вроде line.Replace (4.space или 4 char.IsWhiteSpace (), разделитель).Я надеюсь, что вы хорошо объяснили мне

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Вы можете использовать RegEx, чтобы сделать это, и можете создать метод, который принимает переменные (так что вы можете указать символ и минимальное количество последовательных экземпляров для замены вместе со строкой замены:

public static string ReplaceConsecutiveCharacters(string input, char search,
    int minConsecutiveCount, string replace)
{
    return input == null
        ? null
        : new Regex($"[{search}]{{{minConsecutiveCount},}}", RegexOptions.None)
            .Replace(input, replace);
}

Затем его можно назвать как:

static void Main()
{
    var testStrings = new List<string>
    {
        "Has spaces      scattered          throughout  the   body    .",
        "      starts with spaces and ends with spaces         "
    };

    foreach (var testString in testStrings)
    {
        var result = ReplaceConsecutiveCharacters(testString, ' ', 4, "|");
        Console.WriteLine($"'{testString}' => '{result}'");
    }

    GetKeyFromUser("\nDone! Press any key to exit...");
}

Выход

enter image description here

0 голосов
/ 14 декабря 2018

Моя идея состоит в том, чтобы получить количество пробелов по параметру в методе, но я не знаю, как поместить что-то вроде line.Replace (4.space или 4 char.IsWhiteSpace (), separator)

private string SpacesToDelimiter(string input, int numSpaces  = 4, string delimiter = "|")
{
    string target = new String(' ', numSpaces);
    return input.Replace(target, delimiter);
}

Назовите это так:

string MyNewFile = "...";
using (StreamWriter sWriter = new StreamWriter(MyNewFile, false, encoding, 1))
{
    foreach(string line in File.ReadLines(myFile))
    {
         sWriter.WriteLine(SpacesToDelimiter(line));
    }
}
0 голосов
/ 13 декабря 2018

Regex - хороший инструмент для работы.Попробуйте это:

string MyNewFile;
using (StreamWriter sWriter = new StreamWriter(MyNewFile, false, encoding, 1))
{
    using (StreamReader sReplaceReader = new StreamReader(myFile))
    {
        string line, textLine = "";

        while ((line = sReplaceReader.ReadLine()) != null)
        {
            RegexOptions options = RegexOptions.None;
            Regex regex = new Regex("[ ]{4,}", options);     
            string textLine = regex.Replace(line, "|");

            sWriter.WriteLine(textLine);
        }
    } 
}

Это очень похоже на ответ здесь: Как заменить несколько пробелов одним пробелом в C #?

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