为每个冒号":"拆分长字符串,并按位置获取该行的索引

tua*_*rek 3 c#

我正在努力理解使用Split方法接收我想要的文本我从用户接收长注册字符串,我试图通过冒号分割它,:并为每个冒号发现我想得到所有文本,直到/n在行

我从用户收到的字符串格式如下:

"Username: Jony \n
 Fname: Dep\n
 Address: Los Angeles\n
 Age: 28\n
 Date: 11/01:2001\n"
Run Code Online (Sandbox Code Playgroud)

这是我的approche,直到现在并没有说明它是如何工作的,并没有找到问题similler像我的问题

str = the long string

List<string> names = str.ToString().Split(':').ToList<string>();
names.Reverse();

var result = names[0].ToString();
var result1 = names[1].ToString();

Console.WriteLine(result.Remove('\n').Replace(" ",string.Empty));
Console.WriteLine(result1.Remove('\n').Replace(" ",string.Empty));
Run Code Online (Sandbox Code Playgroud)

AAA*_*ddd 5

基准

----------------------------------------------------------------------------
Mode             : Release (64Bit)
Test Framework   : .NET Framework 4.7.1 (CLR 4.0.30319.42000)
----------------------------------------------------------------------------
Operating System : Microsoft Windows 10 Pro
Version          : 10.0.17134
----------------------------------------------------------------------------
CPU Name         : Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz
Description      : Intel64 Family 6 Model 58 Stepping 9
Cores (Threads)  : 4 (8)      : Architecture  : x64
Clock Speed      : 3901 MHz   : Bus Speed     : 100 MHz
L2Cache          : 1 MB       : L3Cache       : 8 MB
----------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

结果

--- Random characters -------------------------------------------------
| Value |   Average |   Fastest |   Cycles | Garbage | Test |    Gain |
--- Scale 1 -------------------------------------------- Time 1.152 ---
| split |  4.975 µs |  4.091 µs | 20.486 K | 0.000 B | N/A  | 71.62 % |
| regex | 17.530 µs | 14.029 µs | 65.707 K | 0.000 B | N/A  |  0.00 % |
-----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

原始答案

你可以使用正则表达式,或者你可以简单地使用 Split

var input = "Username: Jony\n Fname: Dep\nAddress: Los Angeles\nAge: 28\nDate: 11/01:2001\n";

var results = input.Split(new []{'\n'}, StringSplitOptions.RemoveEmptyEntries)
                .Select(x => x.Split(':')[1].Trim());

foreach (var result in results)
   Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)

完整的演示在这里

产量

Jony
Dep
Los Angeles
28
11/01
Run Code Online (Sandbox Code Playgroud)

注意:这没有错误检查,因此如果您的字符串不包含冒号,它将会中断


其他资源

String.Split方法

返回一个字符串数组,该数组包含此实例中由指定字符串或Unicode字符arr的元素分隔的子字符串

StringSplitOptions枚举

指定适用的Split方法重载是否包含或省略返回值中的空子串

String.Trim方法

返回一个新字符串,其中删除当前String对象中一组指定字符的所有前导和尾随出现.

Enumerable.Select方法

将序列的每个元素投影到新表单中.