C # Как я могу правильно разделить строку?

#c# #string #split

#c# #строка #разделить

Вопрос:

((100amp;12)A)amp;(43amp;144) это моя строка, и я хочу разделить эту строку следующим образом:

 (
(
100
amp;
12
41
)....
  

Я пытаюсь использовать string.Метод toCharArray(), но большие целые числа создают проблему, например, 100:

 1
0
0
  

спасибо за помощь

Комментарии:

1. Как насчет знака процента?

Ответ №1:

Вы можете написать свой собственный токенизатор, но для справки полезно иметь такой sth (код не тестируется):

 var lst = new List<string>();
for (int i=0;i<str.Length;i  )
{

 if (char.IsDigit(str[i])
 {
    var tmp = new string(new []{str[i]});
    i  ;
    while(i<str.Length amp;amp; char.IsDigit(str[i]))
       { tmp = str[i]; i  }
    i--;
    lst.Add(tmp);
 }
 else
  lst .Add(new string(new []{str[i]}));
}
  

Ответ №2:

Здесь нет быстрого решения 1 команды, imo, string.Функция toCharArray() может работать, если вы дополнительно обработаете свой массив для объединения последовательных символов char.isdigit(), или вы можете использовать метод String.split для извлечения блоков 100, 12 и 41, правильно настроив разделители и строку.toCharArray для разделения остальных.

Ответ №3:

попробуйте выполнить итерацию по вашей строке и посмотрите, является ли следующий символ цифрой. Если false, то разделить, иначе пропустить

Ответ №4:

Он возвращает список строк:

 static List<string> SplitLine(string str)
        {
            var lines = new List<string>();

            for (int i = 0; i < str.Length; i  )
            {
                if (!char.IsDigit(str[i]))
                {
                    lines.Add(str[i].ToString());
                    continue;
                }
                string digit = "";
                while (char.IsDigit(str[i]))
                {
                    digit  = str[i  ];
                }
                i--;
                lines.Add(digit);
            }

            return lines;
        }
  

Вывод:

 (
(
100
amp;
12
)
%
41
)
amp;
(
43
amp;
144
)
  

Ответ №5:

 using System;
using System.Text.RegularExpressions;
class Sample {
    public static void Main(){
        var str = "((100amp;12)A)amp;(43amp;144)";
        var pat = "([()amp;%])";
        var tokens = Regex.Split(str,pat);
        foreach(var token in tokens){
            if( !string.IsNullOrEmpty(token))
                Console.WriteLine("{0}", token);
        }
    }
}