在 C# 中将字符串拆分为字符串数组列表

Posted

技术标签:

【中文标题】在 C# 中将字符串拆分为字符串数组列表【英文标题】:Splitting a string into a List of string array in C# 【发布时间】:2020-02-12 01:15:26 【问题描述】:

我正在尝试转换以下字符串:

"CN=Test,OU=ABC,OU=Company,DC=CFLA,DC=domain"

变成这种形式(字符串数组的列表):

[
  "CN" , "Test",
  "OU" , "ABC",
  "OU" , "Company",
  "DC" , "CFLA",
  "DC" , "domain",
]

我已经尝试过将字符串转换为字典列表。我尝试将字符串拆分两次。先以,为基础,再以=为基础。

以下是我使用的代码:

var result = str.Split(',')
                .Select(line => line.Split('='))
                .ToDictionary(b=> b[0], b=> b[1])
                .ToList();

但它给了我以下异常:'System.ArgumentException:'已添加具有相同键的项目',因为'OU'和'DC'被重复作为键。

我现在想要的是将此字符串拆分/转换/处理为字符串数组列表(如上所示)。可能吗?

或者请用替代解决方案指导我。提前致谢。

附:我有数百个这样的字符串,我只想要每个字符串中第一个“OU”的值。

【问题讨论】:

只需删除您的ToDictionary 调用,您就已经有了一个字符串数组列表。虽然如果目标只是“从每个字符串中获取第一个 OU”,那么还有更简单的方法。 【参考方案1】:

如果您真的想要一个 List 字符串-Array,只需省略“ToDictionary”行。

var result = str.Split(',')
            .Select(line => line.Split('='))
            .ToList();

会给你一个数组列表,每个数组 [0] 保存“键”,[1] 保存“值”

ad PS:要获取第一个“OU”值,可以使用正则表达式:

var firstOuRegex = new Regex("[oO][uU]=([^,]+)", RegexOptions.Compiled);
var testString = "CN=Test,OU=ABC,OU=Company,DC=CFLA,DC=domain";

var result = firstOuRegex.Match(testString).Groups[1];

【讨论】:

如果您要使用正则表达式,整个解决方案可能会更好。【参考方案2】:

您的表达式中有两个“OU”条目。因此,您无法将其翻译成字典。相反,将其转换为 KeyValuePair 列表

var result = str.Split(',')
            .Select(line => line.Split('='))
            .Select(tuple => new KeyValuePair<string, string>(tuple[0], tuple[1]))
            .ToList();

【讨论】:

【参考方案3】:

我想下面的代码将为您提供所需的结果:

class Program

    static void Main(string[] args)
    
        string initialString = "CN=Test,OU=ABC,OU=Company,DC=CFLA,DC=domain";

        List<string[]> finalList = new List<string[]>();
        string [] firstSplitStringsArray = initialString.Split(',');
        foreach (var item in firstSplitStringsArray)
        
            string [] secondlySplittedStringsArray = item.Split('=');
            finalList.Add(secondlySplittedStringsArray);
        
    

如果只需要第一个OU值,代码可以是:

        string initialString = "CN=Test,OU=ABC,OU=Company,DC=CFLA,DC=domain";
        string requiredValue = string.Empty;

        string [] firstSplitStringsArray = initialString.Split(',');
        foreach (var item in firstSplitStringsArray)
        
            string [] secondlySplittedStringsArray = item.Split('=');
            if (secondlySplittedStringsArray[0] == "OU")
            
                requiredValue = secondlySplittedStringsArray[1];
                break;
            
        

【讨论】:

以上是关于在 C# 中将字符串拆分为字符串数组列表的主要内容,如果未能解决你的问题,请参考以下文章

在 Perl 中将二进制数据拆分为字节数组

如何在awk中将分隔字符串拆分为数组?

如何在 C++ 中将数字字符串拆分为数组? [复制]

在 Swift 中将字符串拆分为数组?

如何在 C++ 中将字符串拆分为数组

关于在Hive中将特定字符分隔的字符串拆分成多行的应用