C# 一次读取3个字符的字符串

C# 一次读取3个字符的字符串,c#,string,split,C#,String,Split,想象一下这个字符串: _ _ _ _ _ _ _ | _| _||_||_ |_ ||_||_| ||_ _| | _||_| ||_| _| 拆分此字符串的最简单/最好的方法是什么,这样每个数字都可以自己处理 我在想类似的事情 public string[] SplitIntoNumbers(string input) 结果会是什么样子 [" | |", " _ _||_ ", " _ _| _|", ...] 有什么想法吗 编

想象一下这个字符串:

    _  _     _  _  _  _  _
  | _| _||_||_ |_   ||_||_|
  ||_  _|  | _||_|  ||_| _| 
拆分此字符串的最简单/最好的方法是什么,这样每个数字都可以自己处理

我在想类似的事情

public string[] SplitIntoNumbers(string input)
结果会是什么样子

["     |  |", " _  _||_ ", " _  _| _|", ...]
有什么想法吗

编辑

对于想要更多信息的千人来说,问题来自于。我意识到“完成工作”有多种方法——解决方案,但我觉得必须有一种更“奇特”的方法来解决它。相似的东西

我会使用正则表达式建立一个匹配列表,其模式与此类似

(.{3})
这将把输入分成3x1个匹配的块,并根据您有多少个匹配来确定数字。比如说

    _  _     _  _  _  _  _
  | _| _||_||_ |_   ||_||_|
  ||_  _|  | _||_|  ||_| _| 
将生成27个3x1段的匹配,由于每个数字有3行高,您可以只取27/3=9个单独的数字。然后,只需循环遍历正则表达式匹配项,并将它们组合到所需的输出中

void Main()
{
    string input = "    _  _     _  _  _  _  _ \r\n  | _| _||_||_ |_   ||_||_|\r\n  ||_  _|  | _||_|  ||_| _|";

    string[] result = SplitIntoNumbers(input);
}

public string[] SplitIntoNumbers(string input)
{
    List<string> results = new List<string>();

    Regex rx = new Regex("(.{3})");
    MatchCollection matches = rx.Matches(input);
    int totalNumbers = matches.Count / 3;

    for(int i = 0; i < totalNumbers; i++)
    {
        string s = string.Concat(matches[i].Value, matches[i + totalNumbers].Value, matches[i + (totalNumbers * 2)].Value);

        results.Add(s);
    }

    return results.ToArray();
}
void Main()
{
字符串输入=“uuuuuuuuuuuuuuuuuuuuuuuuuuuu124; uu124 124; u124; u124 124; u124; u124 124; u124; u124 124;\r\n | | | | | | | | | | | | | | | | | | |”;
字符串[]结果=拆分为数字(输入);
}
公共字符串[]拆分为数字(字符串输入)
{
列表结果=新列表();
Regex rx=新的Regex(“({3})”;
MatchCollection matches=rx.matches(输入);
int totalNumbers=匹配项。计数/3;
对于(int i=0;i
直截了当地说:

    public static string[] SplitIntoNumbers(string input)
    {
        List<string> result = new List<string>();
        string[] subStrs = input.Split(new char[] { '\r', '\n' }, 3, StringSplitOptions.RemoveEmptyEntries);
        for (int it = 0; it < subStrs[0].Length; it += 3)
        {
            result.Add(subStrs[0].Substring(it, 3)
                + subStrs[1].Substring(it, 3)
                + subStrs[2].Substring(it, 3));
        }
        return result.ToArray();
    }

假设您希望保留字符串数组以供输入,我们可以非常简单地通过一次提取3个字符的行进行循环

    var numbers = new[]
                    {
                        "    _  _     _  _  _  _  _ ",
                        "  | _| _||_||_ |_   ||_||_|",
                        "  ||_  _|  | _||_|  ||_| _|"
                    };

            // just in case length is off on one, don't want to crash
    var length = numbers.Min(line => line.Length);
    var results = new List<string>();

            // go by groups of three
    for (int i = 0; i < length; i += 3)
    {
        var builder = new StringBuilder();
        for (int j = 0; j < numbers.Length; j++)
        {
            builder.Append(numbers[j].Substring(i, 3));
        }

        results.Add(builder.ToString());
    }

            // print the results
    foreach (var digit in results)
    {
        Console.WriteLine(digit);
    }
var number=new[]
{
"    _  _     _  _  _  _  _ ",
"  | _| _||_||_ |_   ||_||_|",
"  ||_  _|  | _||_|  ||_| _|"
};
//以防万一长度在1上有偏差,我不想崩溃
变量长度=numbers.Min(line=>line.length);
var results=新列表();
//三人一组去
对于(int i=0;i
您问:

拆分此字符串的最简单/最好的方法是什么,这样每个数字都可以自己处理

。。。我认为您可能从OO的角度来处理这个问题。你所说的其实是一种“字体”,而不是一组字符。坦率地说,我只是将逻辑封装到一个类中,并像您在本文中所做的那样定义字符数据。它易于查看、编辑和维护

从你最初的帖子中,我不明白你的最终目标是渲染还是解析。无论如何,我不能只停留在数字上;)


扩展方法如何:

    public static string[] SplitIntoNumbers(this string str)
    {
        var lines = str.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
        var columns = lines
            .Select(x => x.InSetsOf(3).Select(y => new string(y.ToArray())).ToList())
            .ToList();
        var numbers = Enumerable.Range(0, columns[0].Count)
            .Select(x => columns[0][x] + columns[1][x] + columns[2][x])
            .ToArray();
        return numbers;
    }
假设是可用的

用法:

        var result = input.SplitIntoNumbers();

您必须使用字符串输入,还是可以使用Nx3字符数组,然后在3x3字符结构中拆分每个组?这里对字符串的解释是什么(它们实际上是用来处理一维字符串的,其中每个字符代表一个字符)?你能写一个例子吗?另请看我得到的
索引AutoFrangeException
——将你使用的输入字符串添加到你的问题中。有创意,我想它会起作用,但我真的很想在这张牌上玩老牌:-)
             _  _     _  _  _  _  _  _
 _         | _| _||_||_ |_   ||_||_|| |
   ___     ||_  _|  | _||_|  ||_| _||_|

-_ 1234567890
 _     _     _  _  _     _   _
|_||_ |   _||_ |_ |  |_| |   ||/ |  |\|
| ||_||_ |_||_ |  |_-| | |  _||\ |_ |||

abcdefghijklm
       _  _  _  _ ___               __
|\| _ |_||_||_|/_  | | || |||| \/ \/ /
| ||_||    ||\  _/ | |_||/ |/| /\ | /_

nopqrstuvwxyz
    public static string[] SplitIntoNumbers(this string str)
    {
        var lines = str.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
        var columns = lines
            .Select(x => x.InSetsOf(3).Select(y => new string(y.ToArray())).ToList())
            .ToList();
        var numbers = Enumerable.Range(0, columns[0].Count)
            .Select(x => columns[0][x] + columns[1][x] + columns[2][x])
            .ToArray();
        return numbers;
    }
        var result = input.SplitIntoNumbers();