Как разделить строку на символы java
Перейти к содержимому

Как разделить строку на символы java

  • автор:

Как разделить строку на символы java

Аватар пользователя Иван Полежаев

Чтобы разбить строку на символы в Java , вы можете использовать метод toCharArray() класса String . Этот метод возвращает массив символов, которые составляют данную строку.

Этот код разобьет строку "Hello, world!" на массив символов и напечатает каждый символ в консоли:

How to Split a String in Java

Sometimes we need to split a string in programming. We suggest String.split (), StringTokenizer, and Pattern.compile () methods.

Spliting a String in Java

The output for this will be like this:

Result

Note: Change regex to come to a different result:
E.g. for («e») regex the result will we like this:

There are many ways to split a string in Java. The most common way is using the split() method which is used to split a string into an array of sub-strings and returns the new array.

1. Using String.split ()

The string split() method breaks a given string around matches of the given regular expression. There are two variants of split() method in Java:

  • public String split(String regex)

This method takes a regular expression as a parameter and breaks the given string around matches of this regular expression regex. By default limit is 0.

Parameter for this is: regex (a delimiting regular expression).

It returns an array of strings calculated by splitting the given string.

Example

  • public String split(String regex, int limit)

Parameters for this are: regex (the delimiting regular expression) and limit (controls the number of times the pattern is applied and therefore affects the length of the resulting array).

This returns the array of strings counted by splitting this string around matches of the given regular expression.

Example

The output for the given example will be like this:

Result

Note: Change regex and limit to have different outputs: e.g. («:», 2)-output will be ; («:», -2)-, etc.

Let’s see another example:

Example

The output will be the following:

Result

Note: Change regex and limit to have another output: e.g. (» «, 2) — the result will be like this:

Result

Output for this will be like this:

Result

2. Using StringTokenizer

In Java, the string tokenizer allows breaking a string into tokens. You can also get the number of tokens inside string object.

Example

Result

Note: You can specify the delimiter that is used to split the string. In the above example we have set the delimiter as space (”).

It is also possible to use StringTokenizer with multiple delimiters.

Example

Result

Note: In the above-mentioned example :, //, ., — delimiters are used.

3. Using Pattern.compile ()

This method splits the given input sequence around matches of the pattern. Parameter for this is: input — the character sequence to be split.

It returns the array of strings computed by splitting the input around matches of the pattern.

Split string into array of character strings

I need to split a String into an array of single character Strings.

Eg, splitting «cat» would give the array «c», «a», «t»

lospejos's user avatar

12 Answers 12

This will produce

But if you need strings

Edit: which will return an empty first value.

If characters beyond Basic Multilingual Plane are expected on input (some CJK characters, new emoji. ), approaches such as «a��b».split(«(?!^)») cannot be used, because they break such characters (results into array [«a», «?», «?», «b»] ) and something safer has to be used:

split("(?!^)") does not work correctly if the string contains surrogate pairs. You should use split("(?<=.)") .

To sum up the other answers.

This works on all Java versions:

This only works on Java 8 and up:

An efficient way of turning a String into an array of one-character Strings would be to do this:

However, this does not take account of the fact that a char in a String could actually represent half of a Unicode code-point. (If the code-point is not in the BMP.) To deal with that you need to iterate through the code points . which is more complicated.

This approach will be faster than using String.split(/* clever regex*/) , and it will probably be faster than using Java 8+ streams. It is probable faster than this:

because toCharArray has to copy the characters to a new array.

Maybe you can use a for loop that goes through the String content and extract characters by characters using the charAt method.

Combined with an ArrayList<String> for example you can get your array of individual characters.

If the original string contains supplementary Unicode characters, then split() would not work, as it splits these characters into surrogate pairs. To correctly handle these special characters, a code like this works:

Daniel Nitzan's user avatar

In my previous answer I mixed up with JavaScript. Here goes an analysis of performance in Java.

I agree with the need for attention on the Unicode Surrogate Pairs in Java String. This breaks the meaning of methods like String.length() or even the functional meaning of Character because it’s ultimately a technical object which may not represent one character in human language.

I implemented 4 methods that split a string into list of character-representing strings ( String s corresponding to human meaning of characters). And here’s the result of comparison:

A line is a String consisting of 1000 arbitrary chosen emojis and 1000 ASCII characters (1000 times <emoji><ascii> , total 2000 "characters" in human meaning).

Comparison of different splitting methods

(discarding 256 and 512 measures) enter image description here

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

Как разбить строку в Java

Введение Часто мы сталкиваемся с ситуацией, когда нам нужно разделить строку на определенный символ или подстроку, чтобы извлечь из нее полезную информацию. Например, мы можем разделить номер телефона на код страны или данные, импортированные из файла CSV. В этой статье мы расскажем, как разбить строку в Java. Метод split () (без ограничений) Этот метод принимает один параметр String в формате регулярного выражения (regex). Этот метод разбивает нить вокруг мата.

Время чтения: 5 мин.

Вступление

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

Например, мы можем разделить номер телефона на код страны или данные, импортированные из файла CSV.

В этой статье мы расскажем, как разбить строку в Java.

Метод split () (без ограничений)

Этот метод принимает один String в формате регулярного выражения (regex). Этот метод разбивает строку вокруг совпадений с заданным регулярным выражением.

Синтаксис этого метода:

Где regex представляет собой разделитель, то есть в зависимости от того, что мы разделим нашу строку. Имейте в виду, что этот параметр не должен быть чем-то сложным, Java просто предоставляет возможность использования регулярных выражений.

Например, давайте посмотрим, как мы можем разделить эту строку на два отдельных имени:

Мы можем просто использовать символ / подстроку вместо фактического регулярного выражения. Конечно, в регулярном выражении есть определенные специальные символы, о которых нам нужно помнить и избегать их, если нам нужно их буквальное значение.

После разделения строки результат возвращается в виде массива строк. Строки в возвращаемом массиве появляются в том же порядке, что и в исходной строке.

Результаты упаковываются в массив String. Чтобы получить отдельные имена, мы можем получить доступ к каждому элементу:

Имейте в виду, что этот метод разделит строку на все вхождения разделителя. Например, у нас может быть вход в формате CSV:

Метод Java split () (с ограничением)

Здесь метод принимает два параметра, один из которых является ранее обсужденным regex , а другой — целочисленным значением, обозначающим limit . Параметр limit используется, чтобы решить, сколько раз мы хотим разделить строку.

Параметр limit может принимать одну из трех форм, т. Е. Он может быть больше, меньше или больше нуля. Давайте посмотрим, что представляет собой каждая из этих ситуаций:

  • Положительный limit — String будет разделена до максимального limit — 1 раз. Помимо этого, остальная часть строки будет возвращена как последний элемент массива, как есть, без разделения. Длина возвращаемого массива всегда будет меньше или равна limit .
  • Отрицательный limit — String разделяется по разделителю столько раз, сколько возможно, игнорируя конкретный набор отрицательных значений. Подстроки в массиве включают конечные пробелы в исходной строке, если они есть.
  • Когда limit установлен на 0 — String снова разделяется столько раз, сколько возможно, и нет ограничения на длину результирующего массива. Он работает так же, как вызов split() с регулярным выражением в качестве единственного аргумента, как было показано ранее. В этом случае конечные пробелы не возвращаются.
Положительное предельное значение

Давайте рассмотрим несколько примеров использования разных лимитов. Во-первых, положительное limit значение:

При ограничении в 4 String будет разделена не более трех ( limit — 1 ) раз. Это дает нам массив с четырьмя элементами (0..3), последним элементом является все, что находится после третьего разделения:

Если бы мы использовали отрицательный limit для этой же String:

String будет разделена столько раз, сколько возможно, а завершающие пустые строки будут добавлены в массив:

Фактическое отрицательное значение, которое мы использовали, не принимается во внимание, мы бы получили тот же результат, если бы использовали -150 .

Если мы установим limit на 0 , строка снова будет разделена столько раз, сколько возможно, но результирующий массив не будет содержать конечных пустых пробелов:

Примечание о специальных символах

Как мы упоминали ранее, regex переданный в качестве разделителя в split() является регулярным выражением. Мы должны обязательно экранировать специальные символы, если мы хотим использовать их буквальное значение в качестве разделителя. Например, * означает «один или несколько экземпляров следующего символа (ов)».

Если мы хотим разбить String по одному из этих символов, необходимо соблюдать особую осторожность, чтобы экранировать эти символы в параметрах метода. Один из способов использовать это — использовать обратную косую черту \ . Например:

Разделяет string переменной на | персонаж. Здесь мы используем две обратной косой черты, так как нам нужно сначала избежать Java-значения обратной косой черты, поэтому обратная косая черта может быть применена к | персонаж.

Вместо этого мы можем использовать набор символов регулярного выражения. Это относится к помещению специальных символов, которые нужно экранировать, в квадратных скобках. Таким образом, специальные символы обрабатываются как обычные символы. Например, мы могли бы использовать | в качестве разделителя, сказав:

Еще один способ избежать специальных символов — использовать Pattern.quote() :

Заключение

Метод split() класса Java String — очень полезный и часто используемый инструмент. Большинство данных, особенно полученные при чтении файлов, потребуют некоторой предварительной обработки, такой как разделение строки, чтобы получить из нее значимую информацию.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *