C # Как правильно разделить строку? - PullRequest
0 голосов
/ 15 октября 2011

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

(
(
100
&
12
41
)....

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

1
0
0

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

Ответы [ 5 ]

1 голос
/ 15 октября 2011

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

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
&
12
)
%
41
)
&
(
43
&
144
)
1 голос
/ 15 октября 2011

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

1 голос
/ 15 октября 2011

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

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 && char.IsDigit(str[i]))
       { tmp+= str[i]; i++}
    i--;
    lst.Add(tmp);
 }
 else
  lst .Add(new string(new []{str[i]}));
}
1 голос
/ 15 октября 2011

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

0 голосов
/ 15 октября 2011
using System;
using System.Text.RegularExpressions;
class Sample {
    public static void Main(){
        var str = "((100&12)%41)&(43&144)";
        var pat = "([()&%])";
        var tokens = Regex.Split(str,pat);
        foreach(var token in tokens){
            if( !string.IsNullOrEmpty(token))
                Console.WriteLine("{0}", token);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...