c# - 如何将带分隔符的字符串拆分为 5 列
问题描述
如何将整个字符串提取为 5 列?
"1;2;3;4;5;A;AAA;AA;AAAA;AAAAA;NA;NA;通过;是;否;test1;test2;test3;test4;test5;Word4;Word5;Word3;Word2;Word1 "
像这样:
我想将最终结果按行放入列表中;
例如:
解决方案
该问题没有规定最终的数据结构。假设我们最后想要这样的东西:
List<string[]>
{
string[]{ "1", "A", "NA", "test1", "Word4" },
string[]{ "2", "AAA", "NA", "test2", "Word5" },
...
}
更好的结构化数据结构会更合适。
假设输入字符串不包含具有分隔符的单词;
var data = "1;2;3;4;5;A;AAA;AA;AAAA;AAAAA;NA;NA;PASS;YES;NO;test1;test2;test3;test4;test5;Word4;Word5;Word3;Word2;Word1";
var splitData = data.Split(';');
var columnCount = 5;
// We check that the input data has the right number of elements (multiple of columnCount).
if (splitData.Length % columnCount != 0)
{
throw new InvalidOperationException();
}
var results = splitData
.Select((columnVal, i) => (columnVal, i)) // projection of each element including its index.
.GroupBy( x => x.i % columnCount, // group elements by 'row' [0,5,10,15,20][1,6,11,16,21][2,7,12,17,22]...
x => x.columnVal, // selecting only the value (we don't need the index anymore).
(_, columns) => columns.ToArray()) // putting all column values for each row in an array, here we could map to a different data structure.
.ToList();
// the 'results' variable has the target data structure.
如果我们在控制台上显示解析后的数据:
for (var i = 0; i < results.Count; i++)
{
var row = results[i];
// each column value 'i' is in 'result[i]'
var columnStr = string.Join(" | ", row);
Console.WriteLine($"Row {i} -> {columnStr}");
}
/*
Row 0 -> 1 | A | NA | test1 | Word4
Row 1 -> 2 | AAA | NA | test2 | Word5
Row 2 -> 3 | AA | PASS | test3 | Word3
Row 3 -> 4 | AAAA | YES | test4 | Word2
Row 4 -> 5 | AAAAA | NO | test5 | Word1
*/
推荐阅读
- r - ggplot barchart“错误:提供给连续刻度的离散值”在重新排序计数的 x 轴上
- css - 你知道为什么关闭按钮和关闭图标没有出现在大屏幕上吗?
- ssis - 如何将特定字符串(dd-jun-yyyy hh:mm:ss)转换为 ssis 中的日期格式
- reactjs - ReactJS 函数式还是纯无状态组件?
- javascript - JQuery - 防止多级下拉菜单在悬停时消失
- java - maven-pmd-plugin 执行失败,原因是“类文件中非本机或抽象的方法中缺少代码属性”
- python - Pyinstaller 致命错误
- php - 在 React-Native 中显示 JSON 数据而不使用列表?
- networkx - 如何绘制具有相同节点和边位置的全息视图/散景的networkx图?
- javascript - 使用 for...in 循环时如何获取属性名称