vinodh muthusamy Ответов: 3

Разбить массив строк и вернуть его в виде строки


Мой вклад таков :
string[] sinput= { "1||age--11||gender--Female|||||", "0||age--16||gender--Male|||||" };


Мне нужен вывод в цикле, например

string soutput = ("age--11,age--16" );
string soutput = ("gender--Female,gender--Male" );


Но я пробовал сам, я не мог достичь этого решения.



private void button8_Click(object sender, EventArgs e)
       {
           string[] ss = { "1||age--11||gender--Female|||||", "0||age--16||gender--Male|||||" };

           for (int i = 0; i < ss.Length; i++)
           {
               string sss = ss[i].ToString().Replace("||",",").Replace(",,","");
           }

       }


Что я уже пробовал:

private void button8_Click(object sender, EventArgs e)
       {
           string[] ss = { "1||age--11||gender--Female|||||", "0||age--16||gender--Male|||||" };

           for (int i = 0; i < ss.Length; i++)
           {
               string sss = ss[i].ToString().Replace("||",",").Replace(",,","");
           }

       }

3 Ответов

Рейтинг:
15

Vinod Jangle

Вы можете попробовать что-то вроде приведенных ниже строк op1 и op2, которые будут содержать ваш вывод и обновлять его в соответствии с вашими потребностями.

string sss;
string[] ss = { "1||age--11||gender--Female|||||", "0||age--16||gender--Male|||||" };

string op1 = String.Empty;
string op2 = String.Empty;

for (int i = 0; i < ss.Length; i++)
{
     sss = ss[i].ToString().Replace("||",",").Replace(",,","");
     string[] p = sss.Split(',');
     op1 += String.Format("{0},", p[1]);//age details
     op2 += String.Format("{0},", p[2]);//gentder details
}


Richard MacCutchan

Зачем ты звонишь ToString в чем-то, что уже является струной?

[no name]

Да, в этом действительно нет необходимости. Обновленное решение.

Richard MacCutchan

Один все еще там. И, по той же причине, зачем вам нужна строка.Формат?

[no name]

Строка.Формат есть, так как вам нужно добавить ',' как seperator

Richard MacCutchan

Мой плохой, пропустил это.

Рейтинг:
1

CHill60

Я не вижу никакой причины, почему вы используете Replace on commas, поскольку во входной строке нет запятых - запятая, которая появляется, является разделителем массива. Задание на string[] ss по сути, это то же самое, что

ss[0] = "1||age--11||gender--Female|||||";
ss[1] = "0||age--16||gender--Male|||||" ;
Ты можешь Split каждая запись в массиве на вертикальной полосе |. Если вы уверены, что каждый элемент в массиве будет иметь тот же формат, то вы можете использовать StringSplitOptions.RemoveEmptyEntries вариант.

Если вы собираетесь восстановить строку из этих элементов, то вам следует использовать класс StringBuilder[^] класс

Приведенный ниже код предполагает, что каждый из элементов массива ss находится в точно таком же формате, как показано в вашем вопросе
string[] ss = { "1||age--11||gender--Female|||||", "0||age--16||gender--Male|||||" };

StringBuilder sb1 = new StringBuilder("(");
StringBuilder sb2 = new StringBuilder("(");
for (int i = 0; i < ss.Length; i++)
{
    var s1 = ss[i].Split(new []{'|'}, StringSplitOptions.RemoveEmptyEntries);
    sb1.Append(s1[1]);
    if(i < ss.Length - 1) sb1.Append(",");
    sb2.Append(s1[2]);
    if (i < ss.Length - 1) sb2.Append(",");
}
sb1.Append(")");
sb2.Append(")");
            
Debug.Print(sb1.ToString());
Debug.Print(sb2.ToString());
В качестве альтернативы вы можете найти элемент, который начинается с "возраст"," пол " - пример:
foreach (var s in s1.Where(s => s.StartsWith("age")))
{
    sb1.Append(s);
    if (i < ss.Length - 1) sb1.Append(",");
}


Рейтинг:
0

Richard MacCutchan

Разделяется запятой, затем вертикальной чертой. Найдите в каждом массиве строки, начинающиеся с ключевых слов "возраст" и "пол", и объедините их по мере необходимости. Кстати вам не нужно звонить ToString на струнах-это бесполезно.


Maciej Los

5ед!