c# substring indexof
Posted
技术标签:
【中文标题】c# substring indexof【英文标题】: 【发布时间】:2011-08-18 01:55:54 【问题描述】:我有一个看起来像这样的字符串 -
"FirstName||Sam LastName||Jones Address||123 Main ST ..."
(还有 100 个不同的值)
我只想从整个字符串中找到 Sam 和 Jones。
所以字符串firstname = originalstring.substring
...等
有人知道我该怎么做吗?
添加 - 我想我忘了提几件事。
FirstName||Sam\r\n MiddleName||\r\n LastName||Jones\r\n ....
所以现在如果我计算对我没有帮助的字符数,原因可能需要更多的项目,而不仅仅是 firstname 和 lastname。
【问题讨论】:
我不清楚原始字符串的格式。您的字符串上似乎每行有一项数据,这是正确的吗?每个字符串是否有多个人员记录,还是每个字符串中只有一个人员记录? 当我偷看您的编辑时,您似乎有多行。但是 *** 应用于您的问题的格式(实际上是 html 应用于您的问题)正在将它们粉碎成一行。因此我很困惑。 我希望我的解释已经解决了你的问题查理。在这里的每一个人,非常感谢你试图帮助我。 整个字符串中是否只有一个人,并且需要名字和姓氏?或者字符串中有多个人,并且您需要找到多个姓氏和名字? 【参考方案1】:使用正则表达式:
string myString = "FirstName||Sam LastName||Jones Address||123 Main ST...";
string pattern = @"FirstName\|\|(\w+) LastName\|\|(\w+) ";
Match m = Regex.Match(myString, pattern);
string firstName = m.Groups[1].Value
string lastName = m.Groups[2].Value;
查看其演示here。
【讨论】:
我喜欢没有人为此建议正则表达式的 :) +1。【参考方案2】:我认为这可能比 .Split 方法更有效。如果你有 ||在 'Sam' 和 'LastName' 之间,那么你肯定想要 .Split。事实上,这可能会更好。
string inStr = "FirstName||Sam LastName||Jones Address||123 Main ST ";
int fStart = inStr.IndexOf("FirstName") + "FirstName".Length + "||".Length;
int fEnd = inStr.IndexOf(" LastName");
string FirstName = inStr.Substring(fStart, fEnd - fStart);
【讨论】:
【参考方案3】:我会在 " " 上拆分字符串两次,然后在 || 上再拆分一次。获取名字和姓氏的值
string [] ary = s.Split(" ");
string [] key;
string firstname;
string lastname;
foreach (string val in ary )
key = val.Split("||");
if ( key[0] == "FirstName")
firstname = key[1];
if ( key[0] == "LastName")
lastname = key[1];
【讨论】:
工作直到你得到一个包含空格的名字。 即使在示例中,拆分“”也不起作用 - 检查街道名称(如果仍然需要这些名称) 如果有空格,即 Address||123 Main ST,在 ' ' 上拆分会失败 如果您假设顺序保持不变并且名称中没有空格,那么应该没问题。【参考方案4】:str = Str.Split("||")[1].split(" ")[0] //Sam
str = Str.Split("||")[2].split(" ")[0] // Jones
【讨论】:
【参考方案5】:类似string firstname = originalstring.substring(indexof("FirstName") + 11, ((indexof("LastName) - indexof("FirstName") + 11 )
这样你就可以得到 || 之后的第一个字母直到“姓氏”之前的第一个字母,姓氏也是如此,您只需将名字与姓氏切换,将姓氏与地址切换
编辑:我的错...不是substring.(indexOf...
,而是
originalString.Substring(origianlString.IndexOf("FirstName) + 11, (originalString.IndexOf("LastName") - originalString.IndexOf("FirstName") + 11)
在查找姓氏时不是 + 11 而是 10,因为 "LastName".Length + + "||".Length = 10
【讨论】:
Rob P. 让它比我更干净:)以上是关于c# substring indexof的主要内容,如果未能解决你的问题,请参考以下文章