C# 文本文件在同一行中创建/删除文本间距

C# textfile create / remove spacing of texts in same line

我该怎么做才能获得如图所示的右侧输出?请注意,稍后会有很多数据具有这种不一致的对齐方式,是否有任何方法可以将所有文本与调整后的对齐方式一起循环,如图像右侧所示?

您可以使用 Regex 将出现的多个空格(2 个或更多,包括制表符)替换为单个空格。例如,

var result = Regex.Replace(str,"[\t ]{2,}"," ");

空格的常见形式可以分为

  • Space
  • 制表符(\t)
  • 换行(\n)
  • Return(\t)

在上面的场景中,您似乎需要用单个空白字符替换所有 Space(2 个或更多)和 Tab 字符(并忽略 NewLine/Return 字符)。为此,您可以使用上面代码中所示的正则表达式

简答,使用 Trim() 或 TrimEnd,但这是我使用我的 Nuget 包完成任务的方式,您可以将其转换为 string.Split()如果你不想使用 Nuget 包:

Nuget 包: DataJuggler.Core.UltimateHelper(.Net 框架)

DataJuggler.UltimateHelper.Core(.Net 核心)

.Net Framework 显示

        // source input
        string inputFileText = "blah            blah              blah    blah  blah   " + Environment.NewLine + "blah blah            blah    blah blah";

        // parse the lines
        List<TextLine> lines = WordParser.GetTextLines(inputFileText);

        // If the lines collection exists and has one or more items
        if (ListHelper.HasOneOrMoreItems(lines))
        {
            // Iterate the collection of TextLine objects
            foreach (TextLine line in lines)
            {
                // Get the words
                List<Word> words = WordParser.GetWords(line.Text);
            }
        }

然后你可以对每行做你想做的,每行包含一个单词列表(字符串文本)。

以下是 Nuget 包使用的代码,如果您想复制它:

        public static List<TextLine> GetTextLines(string sourceText)
        {
            // initial value
            List<TextLine> textLines = new List<TextLine>();

            // typical delimiter characters
            char[] delimiterChars = Environment.NewLine.ToCharArray();

            // local
            int counter = -1;

            // verify the sourceText exists
            if (!String.IsNullOrEmpty(sourceText))
            {
                // Get the list of strings
                string[] linesOfText = sourceText.Split(delimiterChars);

                // now iterate the strings
                foreach (string lineOfText in linesOfText)
                {
                    // local
                    string text = lineOfText;

                    // increment the counter
                    counter++;

                    // add every other row
                    if ((counter % 2) == 0)
                    {
                        // Create a new TextLine
                        TextLine textLine = new TextLine(text);

                        // now add this textLine to textLines collection
                        textLines.Add(textLine);
                    }
                }
            }

            // return value
            return textLines;
        }

        public static List<Word> GetWords(string sourceText, char[] delimeters = null, bool allowEmptyStrings = false)
        {
            // initial value
            List<Word> words = new List<Word>();

            // typical delimiter characters
            char[] delimiterChars = { ' ','-','/', ',', '.', '\t' };

            // if the delimter exists
            if (NullHelper.Exists(delimeters))
            {
                // use these delimters
                delimiterChars = delimeters;
            }

            // verify the sourceText exists
            if (!String.IsNullOrEmpty(sourceText))
            {
                // Get the list of strings
                string[] strings = sourceText.Split(delimiterChars);

                // now iterate the strings
                foreach(string stringWord in strings)
                {
                    // verify the word is not an empty string or a space
                    if ((allowEmptyStrings) || (TextHelper.Exists(stringWord)))
                    {
                        // Create a new Word
                        Word word = new Word(stringWord);

                        // now add this word to words collection
                        words.Add(word);
                    }
                }
            }

            // return value
            return words;
        }