Есть ли на C # String Tokenizer, например, Java?

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

Вы можете использовать метод 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)

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

Я просто хочу подчеркнуть силу метода Сплита C # и дать более подробное сравнение, особенно от человека, который приходит из фона Java.

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

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

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

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

Одна вещь, на которую указывает токенизатор String Java, я считаю, что C # отсутствует (по крайней мере, у Java 7 есть эта функция) есть возможность сохранить разделитель (метки) как токены. Сплит C # отменит токены. Это может быть важно в некоторых приложениях NLP, но для более общих приложений это может быть не проблема.

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

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

Или

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

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

используйте Regex.Split(string,"#|#");

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

Подобным методу Java является:

 Regex.Split(string, pattern); 

где

  • string – текст, который нужно разбить
  • patternpattern типа строки, что разделяет текст

Если вы пытаетесь сделать что-то вроде разделения аргументов командной строки в приложении .NET Console, у вас будут проблемы, потому что .NET либо сломан, либо пытается быть умным (что означает, что он так же хорош, как и сломан). Мне нужно было разделить аргументы на символ пробела, сохранив любые литералы, которые были указаны, чтобы они не разделились посередине. Это код, который я написал для выполнения задания:

 private static List Tokenise(string value, char seperator) { List result = new List(); value = value.Replace(" ", " ").Replace(" ", " ").Trim(); StringBuilder sb = new StringBuilder(); bool insideQuote = false; foreach(char c in value.ToCharArray()) { if(c == '"') { insideQuote = !insideQuote; } if((c == seperator) && !insideQuote) { if (sb.ToString().Trim().Length > 0) { result.Add(sb.ToString().Trim()); sb.Clear(); } } else { sb.Append(c); } } if (sb.ToString().Trim().Length > 0) { result.Add(sb.ToString().Trim()); } return result; } 

Если вы используете C # 3.5, вы можете написать метод расширения для System.String, который вам нужен. Затем вы можете использовать синтаксис:

 string.SplitByMyTokens(); 

Дополнительная информация и полезный пример из MS здесь http://msdn.microsoft.com/en-us/library/bb383977.aspx

  • Ява. Игнорировать акценты при сравнении строк
  • Как использовать «.» Как разделитель с String.split () в java
  • Удалить пробел из строки в Objective-C
  • Как запустить TestNG из командной строки
  • Удалить расширение файла из строки имени файла
  • Как прочитать содержимое файла в строке в C?
  • C ++ printf с std :: string?
  • Самый быстрый способ удалить все непечатаемые символы из строки Java
  • Форматировать строки в методе Console.WriteLine
  • Как удалить разрывы строк из файла в Java?
  • Команда не обнаружила ошибку в присвоении переменной Bash
  • Давайте будем гением компьютера.