Просто используйте подходящий метод String#split()
.
String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556
Обратите внимание, что для этого требуется регулярное выражение , поэтому при необходимости не используйте специальные символы .
Есть 12 символов со специальным значением: обратный слеш \
, каретка ^
, знак доллара $
, точка или точка .
, символ вертикальной черты или трубы |
, знак вопроса ?
, звездочка или звезда *
, знак плюс +
, открывающая скобка (
, закрывающая скобка )
и открывающая квадратная скобка [
, открывающаяся фигурная скобка. {
Эти специальные символы часто называют «метасимволами».
Поэтому, если вы хотите разделить, например, точку / точка, .
что означает « любой символ » в регулярном выражении, используйте обратную косую черту\
для экранирования отдельного специального символа, например, так split("\\.")
или используйте класс символов[]
для представления литеральных символов, таких как так split("[.]")
, или используйте Pattern#quote()
для избежать всей строки, как это split(Pattern.quote("."))
.
String[] parts = string.split(Pattern.quote(".")); // Split on period.
Чтобы заранее проверить, содержит ли строка определенные символы, просто используйте String#contains()
.
if (string.contains("-")) {
// Split it.
} else {
throw new IllegalArgumentException("String " + string + " does not contain -");
}
Обратите внимание, это не требует регулярного выражения. Для этого используйте String#matches()
вместо этого.
Если вы хотите сохранить разделенный символ в результирующих частях, используйте позитивный обзор . В случае, если вы хотите, чтобы символ разделения находился в левой части, используйте положительный вид сзади, добавив префикс ?<=
группы к шаблону.
String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556
Если вы хотите, чтобы символ разделения находился справа, используйте положительный прогноз, добавив префикс ?=
группы к шаблону.
String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556
Если вы хотите ограничить количество получаемых частей, вы можете указать желаемое число в качестве второго аргумента split()
метода.
String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42
reugalr expression
он возвращает один массив элементов со всей строкой.Альтернативой прямой обработке строки было бы использование регулярного выражения с группами захвата. Это имеет то преимущество, что позволяет легко вводить более сложные ограничения для ввода. Например, следующее разбивает строку на две части и гарантирует, что обе состоят только из цифр:
Поскольку в этом случае шаблон является фиксированным, его можно заранее скомпилировать и сохранить как статический член (инициализированный во время загрузки класса в примере). Регулярное выражение:
Круглые скобки обозначают группы захвата; Строка, которая соответствует этой части регулярного выражения, может быть доступна методом Match.group (), как показано. \ D соответствует и одной десятичной цифре, а + означает «соответствует одному или нескольким предыдущим выражениям.) - не имеет специального значения, поэтому просто соответствует этому символу во входных данных. Обратите внимание, что вам необходимо дважды экранировать обратную косую черту при написании этого в виде строки Java. Некоторые другие примеры:
источник
m.group(1)
, вторая частьm.group(2)
, посколькуm.group(0)
фактически возвращает шаблон полного соответствия. Я думаю, что я также помню, чтоgroup(0)
раньше было первое совпадение вместо полного шаблона, возможно, это изменилось в недавнем обновлении версии Java.Это разделит вашу строку на 2 части. Первый элемент в массиве будет частью, содержащей материал перед
-
, а второй элемент в массиве будет содержать часть вашей строки после-
.Если длина массива не равна 2, то строка была не в формате:
string-string
.Проверьте
split()
метод вString
классе.источник
должен делать то, что вы хотите. У класса String есть много методов для работы со строкой.
источник
источник
StringTokenizer
это устаревший класс, который сохраняется из соображений совместимости, хотя его использование не рекомендуется в новом коде . Рекомендуется всем, кто ищет эту функциональность, вместо этого использоватьsplit
методString
илиjava.util.regex
пакет».С Java 8:
источник
.map(String::trim)
послеsplit
Требования оставили место для интерпретации. Я рекомендую написать метод,
которые инкапсулируют эту функцию. Конечно, вы можете использовать String.split (..), как указано в других ответах для реализации.
Вы должны написать несколько юнит-тестов для входных строк и желаемых результатов и поведения.
Хорошие тестовые кандидаты должны включать в себя:
Определив соответствующие результаты теста, вы можете указать поведение.
Например, если
"-333"
должен вернуться[,333]
или если это ошибка. Можно"333-333-33"
разделить на[333,333-33] or [333-333,33]
или это ошибка? И так далее.источник
Вы можете попробовать так же
источник
При условии, что
Самый простой способ - использовать StringUtils # split (java.lang.String, char) . Это удобнее, чем тот, который предоставляется Java из коробки, если вам не нужны регулярные выражения. Как сказано в его руководстве, он работает так:
Я бы порекомендовал использовать commong-lang, поскольку обычно он содержит много полезного. Однако, если вам это не нужно для чего-то еще, кроме деления, тогда лучше реализовать себя или экранировать регулярное выражение.
источник
Используйте метод разделения org.apache.commons.lang.StringUtils, который может разбивать строки на основе символа или строки, которую вы хотите разделить.
Подпись метода:
В вашем случае вы хотите разбить строку, когда есть «-».
Вы можете просто сделать следующее:
Вывод:
Предположим, что если
-
в вашей строке не существует, он возвращает заданную строку, и вы не получите никакого исключения.источник
Подводя итог: есть как минимум пять способов разбить строку в Java:
String.split ():
Pattern.compile (регулярное выражение) .splitAsStream (вход):
StringTokenizer (устаревший класс):
Google Guava Splitter:
Apache Commons StringUtils:
Таким образом, вы можете выбрать лучший вариант для вас, в зависимости от того, что вам нужно, например, тип возвращаемого значения (массив, список или итерируемый).
Вот большой обзор этих методов и наиболее распространенных примеров (как разделить на точки, косая черта, знак вопроса и т. Д.)
источник
Самый быстрый способ, который также потребляет наименьшее количество ресурсов, может быть:
источник
string1 = s.substring(0, s.indexOf("-"));
string2 = s.substring(s.indexOf("-") + 1);
из этого. Вы получитеStringIndexOutOfBoundsException
автоматически, если не было "-".String Split с несколькими символами с использованием Regex
Вывод:
Но не ожидайте одинакового вывода во всех версиях JDK. Я видел одну ошибку, которая существует в некоторых версиях JDK, где первая пустая строка была проигнорирована. Эта ошибка отсутствует в последней версии JDK, но существует в некоторых версиях между поздними версиями JDK 1.7 и ранними версиями 1.8.
источник
Для простых случаев использования
String.split()
следует делать работу. Если вы используете guava, есть также класс Splitter, который позволяет связывать различные строковые операции и поддерживает CharMatcher :источник
источник
Вы можете разбить строку на разрыв строки, используя следующую инструкцию:
Вы можете разбить строку на дефис / символ, используя следующую инструкцию:
источник
источник
Вы можете использовать Split ():
Иначе, вы можете использовать StringTokenizer:
источник
Есть только два метода, которые вы действительно должны рассмотреть.
Используйте String.split для односимвольного разделителя, или вы не заботитесь о производительности
Если производительность не является проблемой или если разделитель представляет собой один символ, который не является специальным символом регулярного выражения (т. Е. Не одним из них
.$|()[{^?*+\
), то вы можете использовать егоString.split
.Метод split имеет оптимизацию, позволяющую избежать использования регулярного выражения, если разделитель представляет собой один символ и отсутствует в приведенном выше списке. В противном случае он должен скомпилировать регулярное выражение, и это не идеально.
Используйте Pattern.split и прекомпилируйте шаблон, если используете сложный разделитель, и вы заботитесь о производительности.
Если производительность является проблемой, и ваш разделитель не является одним из вышеперечисленных, вы должны предварительно скомпилировать шаблон регулярного выражения, который затем можно использовать повторно.
Этот последний вариант все еще создает новый
Matcher
объект. Вы также можете кэшировать этот объект и сбрасывать его для каждого входа для максимальной производительности, но это несколько сложнее и не поточнобезопасно.источник
Один из способов сделать это - запустить строку в цикле for-each и использовать необходимый символ разделения.
Вывод:
источник
Пожалуйста, не используйте класс StringTokenizer, так как это унаследованный класс, который сохраняется из соображений совместимости, и его использование не рекомендуется в новом коде. И мы можем использовать метод разделения, как предложено другими.
И, как ожидается, он напечатает:
В этом ответе я также хочу указать на одно изменение, которое произошло с
split
методом в Java 8 . Метод String # split () используетPattern.split
, и теперь он удалит пустые строки в начале массива результатов. Обратите внимание на это изменение в документации для Java 8:Это означает для следующего примера:
мы получим три строки:
[0, 0, 4]
а не четыре, как это было в Java 7 и ранее. Также проверьте этот похожий вопрос .источник
Вот два способа достижения этого двумя.
ПУТЬ 1: Поскольку вам нужно разделить два числа специальным символом, вы можете использовать регулярное выражение
ПУТЬ 2: Использование метода разделения строк
источник
Вы можете просто использовать StringTokenizer, чтобы разделить строку на две или более частей, независимо от того, существуют ли какие-либо разделители:
источник
Проверьте
split()
метод вString
классе на Javadoc.Здесь много примеров разбитой строки, но я немного оптимизировал код.
источник
-
на|
и посмотрите, что получится :)источник
Я просто хотел написать алгоритм вместо использования встроенных функций Java:
источник
Вы можете использовать метод
split
:источник
Чтобы разбить строку, используется String.split (regex). Просмотрите следующие примеры:
Вывод
Замечания:
Это разделение (регулярное выражение) принимает регулярное выражение в качестве аргумента. Не забудьте экранировать специальные символы регулярного выражения, такие как точка / точка.
источник
источник
Чтобы разбить строку, используйте
String.split(regex)
:Вывод:
источник