繁体   English   中英

删除部分字符串的最佳方法是什么? (C#)

[英]What's the best way to remove portions of a string? (C#)

我循环遍历一个数组,其中有一个字符串,如下例所示:“1001 - 一些成分”。

现在,当我遍历数组时,我得到整个字符串

string ingCode = theData[i + 1];

但我真正需要的只是“1001”而不是整个shibang。

结合列出的其他一些方法,以获得第一部分或代码

string myString = "1001--Some ingredient";
string myPortionOfString = myString.Substring(0, myString.IndexOf("--"));

这使您可以处理比4个字符更长(或更短)的成分代码。

如果分隔符发生更改但所需信息始终为数字,则使用正则表达式解析数字。

您可以使用SubString方法:

    string myString = "1001--Some ingredient";
    string myPortionOfString = myString.Substring(0, 4);
    Console.WriteLine(myPortionOfString);

控制台输出是这样的:

1001

你有没有提到这个?

编辑:

看到评论之后,如果您不确切地知道“ - ”之前有多少数字,那么最好的答案就是@Rob Allen提出的答案。 我给他+1。

//...
string myPortionOfString = myString.Substring(0, myString.IndexOf("--"));
//...

如果分隔符始终为“ - ”,您可以尝试:

string ingCode = theData[i+1].Split('-')[0];

如果您始终对字符串开头的数字感兴趣,请尝试使用RegEx:

string ingCode = System.Text.RegularExpressions.Regex.Match(theData[i+1], @"^([0-9]*)").ToString();

您可以使用正则表达式:

Regex rgx = new Regex(@"(?<Code>\d+)--(?<Ingedient>\w+)", RegexOptions.IgnoreCase);
MatchCollection matches = rgx.Matches("1001--Some Ingredient");
foreach(Match match in matches)
    Console.WriteLine("Code:{0}, Ingredient:{1}",match.Groups["Code"], match.Groups["Ingredient"]);

可以通过几种不同的方式完成,具体取决于您对数据外观的了解。

假设我们一直在寻找前4个字符:

string ingCode = theData[i + 1].Substring(0, 4);

假设我们正在寻找“ - ”之前的任何内容:

string ingCode = theData[i + 1].Split(new string[] {"--"}, StringSplitOptions.None)[0];

假设我们在字符串的开头寻找一个或多个数字:

string ingCode = Regex.Match(theData[i + 1], @"^\d+").Captures[0];

你可以使用StringBuilder类,或者只是通过在[0],[1],[2],[3]处附加索引来创建一个新的字符串(在你总是需要前4个字符的情况下。你也可以创建一个左功能:

Console.Writeline(Left(myString, 4));

public static string Left(string param, int length)        
{        
string result = param.Substring(0, length);             
return result;        
} 

您可以做的另一件事是创建一个字符串扩展方法:

static class StringExtensions
 {
  public static String Left(this string str, int numbOfChars)
   {
    if(str.Length <= numbOfChars) return str;
    return str.Substring(0, numbOfChars);
   }

  public static String Right(this string str, int numbOfChars)
    {
      if numbOfChars >= str.Length) return str;
      return str.Substring(str.Length, str.Length-numbOfChars);
    }
 }

您可以这样调用:

String test = "Hello World";
String str = test.Left(3); //returns Hel

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM