C# 如何拆分字符串数组?
我有一个包含以下内容的文件:C# 如何拆分字符串数组?,c#,C#,我有一个包含以下内容的文件: Message1 : Some Random String 1 Message2 : Some Random String 2 Message3 : Some Random String 3 Message4 : Some Random String 4 Message5 : Some Random String 5 我正在尝试找出如何在“:”字符后拆分每一行 到目前为止,我已经尝试过了,但没有得到理想的输出: string splitConfig() {
Message1 : Some Random String 1
Message2 : Some Random String 2
Message3 : Some Random String 3
Message4 : Some Random String 4
Message5 : Some Random String 5
我正在尝试找出如何在“:”字符后拆分每一行
到目前为止,我已经尝试过了,但没有得到理想的输出:
string splitConfig() {
string split = ":";
string[] lines = File.ReadAllLines("config_file.cfg");
string linesJoined = lines[0] + "\n" + lines[1] + "\n" + lines[2] + "\n" + lines[3] + "\n" + lines[4];
string output = linesJoined.Substring(linesJoined.IndexOf(split) + split.Length);
return output;
}
这才刚刚回来
"Some Random String 1
Message2 : Some Random String 2
Message3 : Some Random String 3
Message4 : Some Random String 4
Message5 : Some Random String 5"
但我正在寻找以下输出:
{
"Some Random String 1",
"Some Random String 2",
"Some Random String 3",
"Some Random String 4",
"Some Random String 5"
}
也许:
var result = input.Split('\n')
.Select(x => x.Substring(x.IndexOf(":") + 2));
您的要求有点难以理解,但我相信这将为您提供您想要的:
var messages = input.Split(new []{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
.Select(l => l.Split(' : ')[1])
.ToList();
这是另一个解决方案,只是为了好玩:
var result =
input.Split(new[] { " : ", "\n" }, StringSplitOptions.None)
.Where((x, i) => i % 2 == 1);
根据您的更新,您似乎已经在将文件读入表示每行的字符串数组中,因此您现在所要做的就是为每行获取
:
后面的部分。您的算法并不遥远,但请尝试使用一点Linq,如下所示:
string Char = ":";
string[] Messages = File.ReadAllLines(@"MessageMenu.cfg");
var Output = Messages.Select(s => s.Substring(s.IndexOf(Char) + Char.Length));
请注意,这不会返回单个字符串,而是一个,表示文件中的所有消息字符串。或
string sourceText = @"
Message1 : Some Random String 1
Message2 : Some Random String 2
Message3 : Some Random String 3
Message4 : Some Random String 4
Message5 : Some Random String 5
" ;
Regex rx = new Regex( @"^\s*(.*?)\s+:\s+(.*?)\s+$" , RegexOptions.Multiline ) ; // using non-greedy accumulation here (.*?) to reduce backtracking
Dictionary<string,string> messages = rx
.Matches(sourceText)
.Cast<Match>()
.ToDictionary(
m => m.Groups[1].Value ,
m => m.Groups[2].Value
) ;
string sourceText=@”
消息1:一些随机字符串1
信息2:一些随机字符串2
信息3:一些随机字符串3
消息4:一些随机字符串4
消息5:一些随机字符串5
" ;
Regex rx=new Regex(@“^\s*(.*?\s+:\s+(.*?\s+$”,RegexOptions.Multiline);//在此处使用非贪婪累积(.*)以减少回溯
字典消息=rx
.Matches(源文本)
.Cast()
.ToDictionary(
m=>m.Groups[1]。值,
m=>m.Groups[2]。值
) ;
@user3175478非常严肃地说,你的问题被否决了,因为1)不清楚你在问什么,2)你没有显示你尝试的代码+它给你带来的任何问题。让你明白。添加了我的代码