【问题标题】:Parsing a semicolon-separated list解析分号分隔的列表
【发布时间】:2023-03-14 05:49:01
【问题描述】:

我有一个分号分隔的值列表,例如:

strins s = "param1=true;param2=4;param3=2.0f;param4=sometext;";

我需要一个函数:

public bool ExtractBool(string parameterName, string @params);
public int ExtractInt(string parameterName, string @params);
public float ExtractFloat(string parameterName, string @params);
public string ExtractString(string parameterName, string @params);

.net 中是否有特殊功能可以帮助我处理分号分隔的列表?

PS:参数名称在列表中是相同的。

【问题讨论】:

  • 您的列表以分号分隔,而不是逗号分隔。另外,如果其中一个值需要包含分隔符会怎样?
  • 对不起,我的英语不好。我会解决的。
  • param1 永远是 bool 而 param2 永远是 int 等等?还是它们都可以是任何类型?另外,您的字符串中可以包含; 吗?
  • 如果其中一个值需要包含分隔符会怎样? ->>>什么都没有发生。它没有任何递归或类似的东西。||||||||||||||||||||param1 总是一个 bool 而 param2 总是一个 int 等等?还是它们都可以是任何类型? ->>> 不,这只是一个例子。我有一个分号分隔的列表和参数名称。我确切地知道一个参数名称和它的类型。我知道它在列表中。我只需要找到它的价值。

标签: c# .net algorithm csv


【解决方案1】:

为了更好的字符串,你可以使用Split(';');

你可以试试这个分割逗号

string s ="param1=true;param2=4;param3=2.0f;param4=sometext;";

string[] sArray = s.Split(';')

【讨论】:

  • 我认为你的意思是:string[] sArray = s.Split(';');
【解决方案2】:

我需要做同样的事情,这样我才能从一个天蓝色的连接字符串中提取名称值对。

与实现的唯一细微差别是在我们使用重载以确保我们只得到两个结果的情况下将参数拆分为等式的重载。

这意味着当参数值包含“=”字符时,它们将被忽略。 IE。它仍然适用于诸如“AccountKey=ABCDEFGHI==;”之类的值

希望这可以为某人节省几分钟!

public class StorageConfiguration
{
    public string StorageAccountConnectionString { get; set; }

    public StorageConfiguration(string storageAccountConnectionString)
    {
        StorageAccountConnectionString = storageAccountConnectionString;
    }

    public string GetConnectionStringItem(ConnectionStringItem connectionStringItem)
    {
        if (string.IsNullOrWhiteSpace(StorageAccountConnectionString)) throw new ArgumentException("StorageAccountConnectionString is empty");

        var items = StorageAccountConnectionString.Split(";", StringSplitOptions.RemoveEmptyEntries).ToDictionary(x=> x.Split("=", 2)[0], y=> y.Split("=", 2)[1]);

        return items[connectionStringItem.ToString()];
    }


    public enum ConnectionStringItem
    {
        DefaultEndpointsProtocol,
        BlobEndpoint,
        AccountName,
        AccountKey
    }
}

【讨论】:

  • 在这里使用 ToDictionary 会造成混淆。每次方法调用都会重新创建和关闭它。如果不需要缓存字典,我会做类似return ...Select(x => x.Split("=", 2)).Where(x => x[0] == connectionStringItem_AsString).Select(x => x[1]);
【解决方案3】:

这是一种更好的方法,可以避免出现一大堆空数组元素:

        string lsToString = "Your String Here";
        string[] laChars = { "," };
        string[] laTo = lsToString.Split(laChars, StringSplitOptions.RemoveEmptyEntries);

拆分字符串后更容易使用,因为您不必担心空元素。

皮特

【讨论】:

    【解决方案4】:

    首先,您需要的是 String.Split() 方法 - 它将您的字符串拆分为一个字符串数组。

    你会在网上找到很多这样的例子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多