想象一下这个字符串:
_ _ _ _ _ _ _
| _| _||_||_ |_ ||_||_|
||_ _| | _||_| ||_| _|
Run Code Online (Sandbox Code Playgroud)
分割这个字符串最简单/最好的方法是什么,这样每个数字都可以自己处理?
我在想类似的东西
public string[] SplitIntoNumbers(string input)
Run Code Online (Sandbox Code Playgroud)
结果会是什么样的
[" | |", " _ _||_ ", " _ _| _|", ...]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑
因为想要更多信息 - 问题来自于BankOCR -kata over CodingDojo.我意识到有多种方法可以"完成工作" - 解决方案,但我觉得必须有一种更''花哨'的解决方法.一些类似于clojure的东西.
我将使用正则表达式来构建具有与此类似的模式的匹配列表
(.{3})
Run Code Online (Sandbox Code Playgroud)
这会将输入分解为 3x1 匹配的块,并根据您拥有的匹配数量来确定数字。例如
_ _ _ _ _ _ _
| _| _||_||_ |_ ||_||_|
||_ _| | _||_| ||_| _|
Run Code Online (Sandbox Code Playgroud)
将生成 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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |