#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);
}
}
}