簡體   English   中英

如何獲取字符串的特定部分並將其分配給c#中的變量?

[英]How to get specific parts of string and assign them to variables in c#?

將這樣的字符串傳遞給后面的代碼:

0,-1 | 1,-1 | 2,-1 | 3,-1 | 4,-1 | 5,-1 | 6,-1 | 7,-1 | 8,-1

我需要能夠為每個“ |”分配“,”符號之前和之后的值 在字符串中退出的符號,分隔成多個變量,“ line”代表第一個值(在“,”之前),“ group”代表下一個值(在“,”之后)。

現在,我正在嘗試使用此方法,但是從string []轉換為string時遇到了一些問題。

public static string GuardarGrupos(string parametro){


    var data = parametro.Split(Convert.ToChar("|"));

    var datos = "";
    string[] linea;
    var grupo = "";

    //Iterate through each of the letters
    foreach (var check in data)
    {

        datos = data[0];
        linea = data[0].Split(Convert.ToChar(","));

    }

    return linea;
}

任何想法我怎么能做到這一點?

制作一個classstruct來保存您的值:

public class DataObject
{
   public string X {get; set;}

   public string Y {get; set;}
}

返回類型為DataObjectList<T>

public static List<DataObject> GuardarGrupos(string parametro){
    //List to return
    List<DataObject> returnList = new List<DataObject>();

    //Split the string on pipe to get each set of values
    var data = parametro.Split('|'); //No need to do a convert.char(), 
    //String.Split has an overload that takes a character, use single quotes for character

    //Iterate through each of the letters
    foreach (var check in data)
    {
       //Split on comma to get the individual values
       string[] values = check.Split(',');
       DataObject do = new DataObject()
       {
          X = values[0];
          Y = values[1];
       };
       returnList.Add(do);
    }

    return returnList;
}

一旦有了List<DataObject> ,就可以使用linqstring.Join形成行和組。

List<DataObject> myList = GuardarGrupos("0,-1|1,-1|2,-1|3,-1|4,-1|5,-1|6,-1|7,-1|8,-1");
string line = string.Join(",", myList.Select(x => x.X);
string group = string.Join(",", myList.Select(y => y.Y);

代替使用局部變量,創建一個存儲您檢索到的值的類。 然后您就可以根據需要處理/操縱這些值。

    public class MyData
    {
        public string Datos { get; set; }
        public string Linea { get; set; }
        public string Grupo { get; set; }
    }

    public static List<MyData> myFunction(string parametro)
    {
        List<MyData> result = new List<MyData>();
        var data = parametro.Split(Convert.ToChar("|"));

        foreach (var check in data)
        {
            MyData temp = new MyData();
            var line = check.Split(',');
            temp.Datos = line[0];
            temp.Linea = line[1];
            temp.Grupo = check;

            result.Add(temp);
        }

        return result;
    }

    static void Main(string[] args)
    {
        var t = myFunction("0,-1|1,-1|2,-1|3,-1|4,-1|5,-1|6,-1|7,-1|8,-1");
    } 

這是一個健壯的解決方案,僅是對字符串的簡單迭代。

void Main()
{
    var xs = "0,-1|1,-1|2,-1|3,-1|4,-1|5,-1|6,-1|7,-1|8,-1";

    var stack = new Stack<Pair>();
    stack.Push(new Pair());

    foreach(var x in xs)
        if(x == '|')
            stack.Push(new UserQuery.Pair());
        else
            stack.Peek().Accept(x);

    foreach (var x in stack.Reverse())      
        Console.WriteLine(x);       
}

sealed class Pair
{
    Action<char> _Accept;

    readonly List<char> Line = new List<char>();
    readonly List<char> Group = new List<char>();

    public Pair()
    {
        _Accept = x => Line.Add(x);
    }

    public void Accept(char c)
    {
        if(c == ',')
            _Accept = x => Group.Add(x);
        else        
            _Accept(c);
    }

    public override string ToString()
    {
        return "Line:" + new string(Line.ToArray()) + " Group:" + new string(Group.ToArray());
    }
}

暫無
暫無

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

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