如何使用.NET框架将字符串拆分为两个单独的数组?

时间:2010-07-29 12:51:40

标签: .net arrays string

我有一个包含整数和字符串的字符串。如何将其拆分为两个数组,一个用于整数,另一个用于字符串?我还需要维护顺序,因为我正在编写一个文件解析系统,该系统依赖于读入并正确地拆分这些字符串。

编辑:这是一个示例输入,以及我想要的输出:

~Wolf 100 45 4 5

Wolf作为数组中的字符串 和他们自己单独的数组中的int。

编辑:更多信息:

我从用户那里得到五个变量并将它们写入文件。然后,我再次读回来。我需要能够通过名称识别数字。现在我想到了,实际上,我不确定拆分字符串是最好的方法。有没有办法将int和字符串放在一个数组中?这样我就能找到这个名字,并且知道它后面的四个整数属于它。

7 个答案:

答案 0 :(得分:3)

使用Dictionary(Of TKey, TValue)作为键,String作为键,Integer()数组作为值。这将为您提供您正在寻找的查找功能......

Sub Main()
    Dim Input As String = "~Wolf 100 45 4 5" & Environment.NewLine & _
                          "~Racoon 500 41 9 7"

    Dim Dict As New Dictionary(Of String, Integer())

    For Each Line As String In Input.Split(Environment.NewLine)
        Dim Key As String
        Dim Values As Integer() = New Integer() {}

        For Each LineValue As String In Line.Split(" "c)
            Dim TryInt As Integer

            If Integer.TryParse(LineValue, TryInt) Then
                ReDim Preserve Values(Values.Length)
                Values(Values.Length - 1) = TryInt
            Else
                Key = LineValue.Trim("~")
            End If
        Next

        If Not String.IsNullOrEmpty(Key) Then
            Dict.Add(Key, Values)
        End If
    Next

    ' How to use                             \\'
    Dim WolfVals As Integer() = Dict.Item("Wolf")

    For Each Int as Integer in WolfVals
        Console.WriteLine(Int)
    Next

    Console.Read()
End Sub

答案 1 :(得分:2)

  

我需要能够识别出来   名字上的数字。

我不会重复string.split的答案,但也许你不应该在两种情况下都使用数组但是可以用一个对象代表用户? e.g。

public class User
{
  public string UserName{get;set;}
  public List<int> Parameters= new List<int>();
}

然后,您可以将用户放入数组,列表,字典等中以查找用户,然后检索用户输入的参数。

答案 2 :(得分:1)

Pseudologic

  • 首先将字符串拆分为数组
  • 创建List<int>List<string>
  • 通过数组迭代并使用Int.TryParse,如果返回为true,则插入List<int>,否则List<string>

---用例子-----

编辑
var list = line.Split(',', StringSplitOptions.RemoveEmptyEntries);
var intList = new List<int>();
var textList = new List<string>();
int val = 0;
foreach(var item in list)
{
   if(Int.TryParse(item, out val))
    intList.Add(val);
   else
    textList.Add(item);
}

答案 3 :(得分:1)

正如@Fadrian所说:

List<int> integers = new List<int>();
List<string> strings= new List<string>();

foreach(var variable in originalstring.split(" ")){
 try{
  integers.Add(Convert.ToInt32(vaiable));
 }
 catch(){
  strings.Add(variable)
 }
}

但是从我能读到的内容中我会做其他事情。我会创建一个XML或数据库表或者某些东西。

如果它必须在纯文本文件中,请为您的名称和数字使用不同的分隔符:例如

名称| number1,number2,number ...

然后拆分一次“|”第一个是名字,第二个是数字。然后将第二个分成“,”

答案 4 :(得分:0)

这取决于数据在该字符串中的存储方式。如果数字之间有分隔符,请使用String.Split()

答案 5 :(得分:0)

您必须拥有2个不同的分隔符,例如:

狼#100,45,4,5

然后你可以执行:

string[] splitTheFirst = String.Split('#');
string[] splitTheSecond = splitTheFirst[0].Split(',');
int[] splitTheThird = splitTheFirst[1].Split(',');

然后你将得到一个字符串数组,其中包含第一个拆分的字符串,以及第一个拆分中第二个数组的一个int数组。

答案 6 :(得分:0)

string input = "~Wolf 100 45 4 5";
IEnumerable<string> words = input.Split(' ')
                            .Where(a => a != null && a.Trim() != string.Empty);

List<int> numbers = new List<int>();
List<string> strings = new List<string>();
int value;

foreach (string word in words)
{
    if (int.TryParse(word, out value))
    {
        numbers.Add(value);
    }
    else
    {
        strings.Add(word);
    }
}