簡體   English   中英

在C#中過濾逗號分隔的String

[英]Filtering comma separated String in C#

我有一個動態字符串值,可能包含這樣的值

"Apple   ,Banana, , , ,  Mango  ,Strawberry  , " 

我想過濾這個字符串

"Apple,Banana,Mango,Strawberry". 

我嘗試使用以下代碼,它的工作原理。

有沒有更好的方法在C#(。NET 2.0)中實現相同的目標?

/// <summary>
/// Convert "Comma Separated String" to "Comma Separated String"
/// </summary>
/// <param name="strWithComma">String having values separated by comma</param>
/// <returns>String separated with comma</returns>
private String CommaSeparatedString(String strWithComma)
{
    String rtn = String.Empty;

    List<String> newList= new List<string>();

    if (String.IsNullOrEmpty(strWithComma))
    {
        return rtn;
    }

    String[] strArray = strWithComma.Split(",".ToCharArray());


    if (strArray == null || strArray.Length == 0)
    {
        return rtn;
    }

    String tmpStr = String.Empty;
    String separator=String.Empty;
    foreach (String s in strArray)
    {
        if (!String.IsNullOrEmpty(s))
        {
            tmpStr =s.Replace(Environment.NewLine, String.Empty);
            tmpStr = tmpStr.Trim();
            if (!String.IsNullOrEmpty(tmpStr))
            {
                newList.Add(tmpStr);
            }
        }
    }

    if (newList != null && newList.Count > 0)
    {

        rtn = String.Join(",", newList.ToArray());
    }
    return rtn;

}

你也可以使用正則表達式:

string str = @"Apple   ,,Banana, , , ,  Mango  ,Strawberry  , ";
string result = Regex.Replace(str, @"(\s*,\s*)+", ",").TrimEnd(',');

我相信以下應該可以解決任何.NET版本:

string[] TrimAll( string[] input )
{
    var result = new List<string>();
    foreach( var s in input )
        result.Add( s.Trim() );
    }
    return result.ToArray();
}

var delimiters = new [] { ",", "\t", Environment.NewLine };
string result = string.Join(",", TrimAll( input.Split( delimiters, StringSplitOptions.RemoveEmptyEntries ) ) );

編輯:更新以處理空格,制表符和換行符。

var result = Regex.Replace(strWithComma, ",+", ",").TimEnd(',');
result = Regex.Replace(result, "\s+", string.Empty);

假設您的商品不包含空格:

private String CommaSeparatedString(String strWithComma)
{
    string[] tokens = strWithComma
        .Replace(" ", "")
        .Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries);
    return string.Join(",", tokens);
}

現在我不確定C#2.0是否接受new char[] {','}語法。 如果沒有,您可以在其他地方定義數組(例如,作為類私有成員)。

Regex regex = new Regex(@"\w(?:(?!,| ).)*");
            var items = regex.Matches("Apple ,Banana, , , , Mango ,Strawberry , ").Cast<Match>().Select(m => m.Value);

.NET 2.0版本

List<string> newList = new List<string>();

            Regex regex = new Regex(@"\w(?:(?!,| ).)*");
            string str = "Apple ,Banana, , , , Mango ,Strawberry , ";
            MatchCollection matches = regex.Matches(str);
            foreach (Match match in matches)
            {
                newList.Add(match.Value);
            }

這是一個單行:

var outputString = string.Join(",", inputString.Replace(" ", string.Empty).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries));

沒有正則表達式,沒有拆分和連接,修剪等,O(n)時間。 StringBuilder是一個非常好的類來處理字符串。

編輯如果字符串沒有以字母結尾,則會添加逗號。 因此添加了額外的TrimEnd(',')

string strWithComma = ",Apple   ,Banana, , , ,  Mango  ,Strawberry  , \n John,";
var sb = new StringBuilder();
var addComma = false;
foreach (var c in strWithComma )
{         
  if (Char.IsLetter(c)) // you might want to allow the dash also: example Anne-Marie
  {
    addComma = true;
    sb.Append(c);         
  }
  else
  {         
    if (addComma)
    {
      addComma = false;
      sb.Append(','); 
    }
  }  
}
string rtn = sb.ToString().TrimEnd(',');

警告此方法僅適用於C#3.0或更高版本。 對不起,伙計們沒有充分閱讀這個問題

這將有效,但它可以更容易地完成,如:

string input = "apple,banana,, \n,test\n, ,juice";

var parts = from part in input.Split(',')
            let trimmedPart = part.Replace("\n", "")
            where !string.IsNullOrWhiteSpace(trimmedPart)
            select trimmedPart;

string result = string.Join(",", parts);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM