it-swarm-ru.tech

Есть ли в C # такой String Tokenizer, как в Java?

Я делаю простой анализ ввода строки и мне нужен токенайзер строк. Я новичок в C #, но я запрограммировал Java, и кажется естественным, что C # должен иметь строковый токенизатор. Является ли? Где это находится? Как мне это использовать?

64
andrewrk

Вы можете использовать метод String.Split .

class ExampleClass
{
    public ExampleClass()
    {
        string exampleString = "there is a cat";
        // Split string on spaces. This will separate all the words in a string
        string[] words = exampleString.Split(' ');
        foreach (string Word in words)
        {
            Console.WriteLine(Word);
            // there
            // is
            // a
            // cat
        }
    }
}

Для получения дополнительной информации см. статья Сэма Аллена о разбиении строк в c # (Performance, Regex)

114
Davy Landman

Я просто хочу подчеркнуть мощь метода Split в C # и дать более подробное сравнение, особенно от кого-то, кто происходит из Java фона.

Принимая во внимание, что StringTokenizer в Java допускает только один разделитель, мы можем фактически разделить на несколько разделителей, делая регулярные выражения менее необходимыми (хотя, если нужно регулярное выражение, используйте регулярное выражение всеми средствами!) Возьмем, к примеру, следующее:

str.Split(new char[] { ' ', '.', '?' })

Это разделяется на три разных разделителя, возвращающих массив токенов. Мы также можем удалить пустые массивы с помощью второго параметра в приведенном выше примере:

str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries)

Якобы в String tokenizer Java есть одна вещь, которая, как мне кажется, отсутствует в C # (по крайней мере, у Java 7 есть эта функция), - это возможность сохранять разделитель (и) в качестве токенов. C # Split отбросит токены. Это может быть важно, скажем, в некоторых приложениях НЛП, но для приложений более общего назначения это может не быть проблемой.

20
demongolem

Метод разделения строки - это то, что вам нужно. Фактически, класс токенизатора в Java устарел в пользу метода разделения строк Java.

18
Tim Jarvis

Я думаю, что ближайший в .NET Framework

 String.split () 
3
Steve Morgan

Для сложного разбиения вы можете использовать регулярное выражение для создания коллекции совпадений.

2
Stevo3000
_words = new List<string>(YourText.ToLower().Trim('\n', '\r').Split(' ').
            Select(x => new string(x.Where(Char.IsLetter).ToArray()))); 

Или же

_words = new List<string>(YourText.Trim('\n', '\r').Split(' ').
            Select(x => new string(x.Where(Char.IsLetterOrDigit).ToArray()))); 
2
Skyler

использовать Regex.Split(string,"#|#");

1
adr

Похожий на Java метод:

Regex.Split(string, pattern);

где

  • string - текст, который нужно разделить
  • pattern - шаблон строкового типа, что разбивает текст
0
neronovs

прочитайте это, функция split имеет перегрузку, принимает массив, состоящий из разделителей http://msdn.Microsoft.com/en-us/library/system.stringsplitoptions.aspx

0
Musa