解析分号分隔的列表

Posted

技术标签:

【中文标题】解析分号分隔的列表【英文标题】:Parsing a semicolon-separated list 【发布时间】:2011-02-18 23:32:49 【问题描述】:

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

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 等等?还是它们都可以是任何类型? ->>> 不,这只是一个例子。我有一个分号分隔的列表和参数名称。我确切地知道一个参数名称和它的类型。我知道它在列表中。我只需要找到它的价值。 【参考方案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() 方法 - 它将您的字符串拆分为一个字符串数组。

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

【讨论】:

以上是关于解析分号分隔的列表的主要内容,如果未能解决你的问题,请参考以下文章

将python中的列表保存为分号分隔的文本文件

在分号分隔的列表中搜索 SQL 中的特定值

在 MS Access 中以分号分隔的列表检索电子邮件地址的子查询

Oracle - 将 XML 节点值提取到以分号作为分隔符的列表中

如何将用户输入内容添加到列表和字典中,并在python中用分号(;;;)分隔?

防止 JavaScript 自动插入分号