我需要解析以下字符串,以便将其插入到数据库中。分隔符是“`”:
`020 Some Description `060 A Different Description `100 And Yet Another `
我使用此
将字符串拆分为数组var responseArray = response.Split('`');
然后responseArrray[]
中的每个项目都是这样的:020 Some Description
如何从阵列中获取两个不同的部分?第一部分将是3或4个字符长。第二部分不超过35个字符。
由于我无法控制的一些荒谬的陌生感,第一和第二部分之间会有随机的空间。
答案 0 :(得分:1)
您可以尝试此解决方案:
var inputString = "`020 Some Description `060 A Different Description `100 And Yet Another `";
int firstWordLength = 3;
int secondWordMaxLength = 35;
var result =inputString.Split('`')
.SelectMany(x => new[]
{
new String(x.Take(firstWordLength).ToArray()).Trim(),
new String(x.Skip(firstWordLength).Take(secondWordMaxLength).ToArray()).Trim()
});
以下是LINQPad
中的结果:
更新:我的第一个解决方案存在一些问题,因为在Trim
之后使用了Take
。这是另一种使用扩展方法的方法:
public static class Extensions
{
public static IEnumerable<string> GetWords(this string source,int firstWordLengt,int secondWordLenght)
{
List<string> words = new List<string>();
foreach (var word in source.Split(new[] {'`'}, StringSplitOptions.RemoveEmptyEntries))
{
var parts = word.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
words.Add(new string(parts[0].Take(firstWordLengt).ToArray()));
words.Add(new string(string.Join(" ",parts.Skip(1)).Take(secondWordLenght).ToArray()));
}
return words;
}
}
以下是测试结果:
答案 1 :(得分:1)
或者将其他两个答案放在一起,并获得更完整的内容:
string[] response = input.Split(`);
foreach (String str in response) {
int splitIndex = str.IndexOf(' ');
string num = str.Substring(0, splitIndex);
string desc = str.Substring(splitIndex);
desc.Trim();
}
所以,基本上你使用第一个空格作为分隔符来创建2个字符串。然后你修剪第二个,因为修剪仅适用于前导和尾随空格,而不是介于两者之间的所有内容。
编辑:这是Brad M评论的直接实现。
答案 2 :(得分:0)
string[] entries = input.Split('`');
foreach (string s in entries)
GetStringParts(s);
IEnumerable<String> GetStringParts(String input)
{
foreach (string s in input.Split(' ')
yield return s.Trim();
}
修剪只删除每MSDN的前导/尾随空格,因此描述中的空格不会对您造成伤害。
答案 3 :(得分:0)
您可以通过找到第一个空格并制作substring
来获得第一部分。第二个也是Substring
。尝试这样的事情。
foreach(string st in response)
{
int index = response.IndexOf(' ');
string firstPart = response.Substring(0, index);
//string secondPart = response.Substring(response.Lenght-35);
//better use this
string secondPart = response.Substring(index);
secondPart.Trim();
}
答案 4 :(得分:0)
试试这个
string response =“020 Some Description
060 A Different Description 100 And Yet Another
”;
var responseArray = response.Split('`');
string[] splitArray = {};
string result = "";
foreach (string it in responseArray)
{
splitArray = it.Split(' ');
foreach (string ot in splitArray)
{
if (!string.IsNullOrWhiteSpace(ot))
result += "-" + ot.Trim();
}
}
splitArray = result.Substring(1).Split('-');
答案 5 :(得分:0)
如果第一部分是整数 你需要考虑一些空的 对我来说,第一遍是空的
public void parse()
{
string s = @"`020 Some Description `060 A Different Description `100 And Yet Another `";
Int32 first;
String second;
if (s.Contains('`'))
{
foreach (string firstSecond in s.Split('`'))
{
System.Diagnostics.Debug.WriteLine(firstSecond);
if (!string.IsNullOrEmpty(firstSecond))
{
firstSecond.TrimStart();
Int32 firstSpace = firstSecond.IndexOf(' ');
if (firstSpace > 0)
{
System.Diagnostics.Debug.WriteLine("'" + firstSecond.Substring(0, firstSpace) + "'");
if (Int32.TryParse(firstSecond.Substring(0, firstSpace), out first))
{
System.Diagnostics.Debug.WriteLine("'" + firstSecond.Substring(firstSpace-1) + "'");
second = firstSecond.Substring(firstSpace).Trim();
}
}
}
}
}
}