C#将文本拆分为子字符串

问题描述 投票:0回答:2

我实际上正在尝试将StreamReader.ReadLine()对象(例如“ 1 A&B 2 C&D”)拆分为“ 1”,“ A&B”,“ 2”和“ C&D”子字符串。有人知道实现此拆分的简单算法的想法吗?

c# string split streamreader
2个回答
1
投票

这样的事情(使用少量的Linq ::]

    static private List<string> Parse(string s)
    {
        var result = new List<string>();
        string[] rawTextParts = s.Split(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' });
        var textParts = rawTextParts.Where(t => !string.IsNullOrWhiteSpace(t)).Select(t => t.Trim());
        foreach (string textPart in textParts)
        {
            string numberstring = s.Substring(0, s.IndexOf(textPart)).Trim();
            s = s.Substring(s.IndexOf(textPart) + textPart.Length);
            result.Add(numberstring);
            result.Add(textPart);
        }
        return result;
    }

0
投票

很难从您的问题中推断出确切的要求。但是根据您的示例,我会附带以下内容:

var input = "1 A & B 2 C & D"; // your input

var words = input.Split();

var builder = new StringBuilder();

foreach (var word in words)
{
    if (int.TryParse(word, out var value))
    {
        if (builder.Length > 0)
        {
            Console.WriteLine(builder.ToString()); // or add it to some collection
            builder.Clear();
        }
        Console.WriteLine(word); // or add it to some collection
    }
    else 
    {
        if (builder.Length > 0)
        {           
            builder.Append(' ');
        }
        builder.Append(word);
    }
}

if (builder.Length > 0) // leftovers
{
    Console.WriteLine(builder.ToString()); // or add it to some collection
}

当然,您可以逐个枚举char字符串,并检查它是否是数字,字符或空格等。

© www.soinside.com 2019 - 2024. All rights reserved.