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 ....

所以现在如果我计算对我没有帮助的字符数,原因可能需要更多的项目,而不仅仅是 firstnamelastname

【问题讨论】:

我不清楚原始字符串的格式。您的字符串上似乎每行有一项数据,这是正确的吗?每个字符串是否有多个人员记录,还是每个字符串中只有一个人员记录? 当我偷看您的编辑时,您似乎有多行。但是 *** 应用于您的问题的格式(实际上是 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的主要内容,如果未能解决你的问题,请参考以下文章

c#中 时间格式化

C# String.Substring 等效于 StringBuilder?

c# substring indexof

c#中substring中怎么截取字符串

C#中Substring具体怎么用?(复杂的例子看不懂)

C#中Substring具体怎么用?(复杂的例子看不懂)