- Как разбить строку в Java
- 33 ответа
- JAVA. Как поставить однку скобку в String?
- Войдите, чтобы написать ответ
- Кушает ли память логирование?
- Как разделить строку в Java
- 1. Разделить строку
- 2. Разделить строку по ограничению
- 3. Разделите строку специальными символами регулярного выражения.
- 4. Разделите строку несколькими разделителями
- 5. Разделите строку и Java 8
- 6. Разделите строку пробелом или несколькими пробелами
- 7. Разделить строку на новую строку
- 8. Пример StringTokenizer (устаревший)
Как разбить строку в Java
Это означает, что первая строка будет содержать символы до ‘-‘ , а вторая строка будет содержать символы после ‘-‘ . Я также хочу проверить, есть ли в нем строка ‘-‘ . Если нет, я сделаю исключение. Как я могу это сделать?
33 ответа
String string = "004-034556"; String[] parts = string.split("-"); String part1 = parts[0]; // 004 String part2 = parts[1]; // 034556
Обратите внимание, что для этого требуется регулярное выражение, поэтому не забудьте special символов, если это необходимо.
там содержит 12 символов со специальными значениями: обратная косая черта \ , каретка ^ , знак доллара $ , период или точка . , символ вертикальной полосы или трубы | , знак вопроса ? , звездочка или звезда * , знак плюса + , открывающая скобка ( , закрывающая скобка ) , а квадратная скобка открытия [ , открывающая фигурная скобка < . Эти специальные символы часто называют "метасимволами".
Итак, если вы хотите разделить, например. period/dot . , что означает «любой символ «в регулярном выражении, используйте обратная косая черта \ , чтобы избежать отдельного специального символа, подобного split(«\\.») , или использовать класс символов [] для представления буквального (s), например, split(«[.]») , или используйте Pattern#quote() , чтобы избежать всей строки, например, split(Pattern.quote(«.»)) .
String[] parts = string.split(Pattern.quote(".")); // Split on period.
Чтобы проверить заранее, если строка содержит определенные символы, просто используйте String#contains() .
Обратите внимание, что это не принимает регулярное выражение. Для этого используйте String#matches() . Если вы хотите сохранить разделительный символ в результирующих частях, воспользуйтесь положительным обращением. Если вы хотите, чтобы символ разделения заканчивался слева, используйте положительный lookbehind, префикс ?
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
Если вы хотите ограничить количество результирующих частей, вы можете указать желаемое число как 2-й аргумент метода split() .
String string = "004-034556-42"; String[] parts = string.split("-", 2); String part1 = parts[0]; // 004 String part2 = parts[1]; // 034556-42
JAVA. Как поставить однку скобку в String?
Здравствуйте. мне нужно разделить String именно тогда, когда открывается скобка.
String str = word(blabla);
Я хочу разделить текст начиная с первой скобки и затем с substring убрать последнюю скобку что бы получить с этого текста только blabla.
String[] pieces = str.split("(") - так делать нельзя к сожалению(
а потом я хотел сделать так:
String a = pieces[1].substring(0,pieces[1].lenght()-1)
Итог должен быть такой: blabla.
Как мне достать blabla из скобок, если мне не удасться это сделать с помощью split?
P.S длина word и blabla может быть разной
Простой 2 комментария
Сергей Горностаев, если у меня слово перед скобками может быть любой длинной и слово в скобках тоже, то к сожалению мой опыт не настолько велик что бы это решить только с substring
@Test public void splitString()
String expr = "String str = word(blabla);"; int openParenPosition = expr.indexOf("("); int closeParenPosition = expr.indexOf(")"); String arg = expr.substring(openParenPosition + 1, closeParenPosition);
Самое главное, что нужно понять, это то, то split() принимает паттерн для регулярного выражения, а символ скобки является спец-символом, который нужно экранировать для его поиска. Таким же спец-символом является обратный слеш, но уже и для строки, а не только для регулярного выражения. Следовательно слеш также нужно экранировать.
В результате для передачи корректной строки регулярного выражения, мы должны отправить строку \( , в которой нужно экранировать слеш в начале.
Получается в коде вы будете видеть string.split("\\(");
Войдите, чтобы написать ответ
Кушает ли память логирование?
Как разделить строку в Java
Примеры разделения строки Java, как разделить строку с помощью тире, точки, новой строки, пробелов, регулярных выражений, специальных символов и потока Java 8.
В Java мы можем использовать String#split для разделения строки. split() принимает регулярное выражение в качестве аргумента, что означает, что мы можем разделить строку с помощью шаблона регулярного выражения.
public String[] split(String regex)
- Разделить строку
- Разделить строку по ограничению
- Разделение строки специальными символами регулярного выражения
- Разделите строку несколькими разделителями
- Разделите строку и Java 8
- Разделить строку пробелами
- Разделить строку на новую строку
- СтрокоКенизатор (устаревший)
1. Разделить строку
Ниже приведен пример разделения строки с помощью тире - .
package com.mkyong; public class SplitString < public static void main(String[] args) < String phone = "299-399-4999"; String[] output = phone.split("-"); System.out.println(output.length); // 3 for (String s : output) < System.out.println(s); >/* System.out.println(output[0]); // 299 System.out.println(output[1]); // 399 System.out.println(output[2]); // 4999 */ > >
2. Разделить строку по ограничению
split() также поддерживает второй аргумент limit , который управляет длиной возвращаемого массива. Длина массива не будет превышать предел , а последняя запись массива содержит оставшиеся входные данные после последнего совпадающего разделителя.
package com.mkyong; public class SplitString2 < public static void main(String[] args) < String phone = "299-399-4999"; String[] output = phone.split("-", 2); System.out.println(output.length); // 2 for (String s : output) < System.out.println(s); >//System.out.println(output[0]); // 299 //System.out.println(output[1]); // 399-4999 > >
3. Разделите строку специальными символами регулярного выражения.
3.1 split() принимает регулярное выражение в качестве аргумента, и в регулярном выражении 12 специальных символов имеют особое значение:
- Точка или точка .
- Знак плюс +
- Звездочка или звезда *
- Знак вопроса ?
- Каретка ^
- Знак доллара $
- Открывающая и закрывающая скобки ( и )
- Открывающая квадратная скобка [
- Открывающая фигурная скобка
- Символ трубы |
- Обратная косая черта \
P.S Обе закрывающие квадратные скобки ] и закрывающая фигурная скобка > это обычный персонаж, не нужно убегать.
3.2 Если мы хотим использовать любой из вышеперечисленных специальных символов в качестве разделителя, мы должны избежать его. Например, если мы хотим разделить строку вертикальной чертой или символом трубы | (специальный символ регулярного выражения), что означает или в регулярном выражении, мы должны избежать символа |, используя один из следующих способов:
str.split("\\|") // backslash \ to escape regex special character str.split("[|]") // character class [] to escape regex special character str.split(Pattern.quote("|")) // Pattern#quote() to escape regex special character
3.3 Полный пример разделения строки символом /.
package com.mkyong; import java.util.regex.Pattern; public class SplitString31 < public static void main(String[] args) < String csv = "a|b|c|d"; //String[] output = csv.split("\\|"); //String[] output = csv.split("[|]"); String[] output = csv.split(Pattern.quote("|")); System.out.println(output.length); for (String s : output) < System.out.println(s); >> >
3.4 Полный пример разделения строки символом обратной косой черты \ .
package com.mkyong; import java.util.regex.Pattern; public class SplitString32 < public static void main(String[] args) < String dir = "C:\\Users\\mkyong\\projects\\mkyong-tutorials"; //String[] output = dir.split("\\\\"); //String[] output = dir.split("[\\\\]"); String[] output = dir.split(Pattern.quote("\\")); System.out.println(output.length); for (String s : output) < System.out.println(s); >> >
5 C: Users mkyong projects mkyong-tutorials
4. Разделите строку несколькими разделителями
Если мы хотим разделить строку на несколько разделителей, просто заключите все разделители в квадратные скобки [ ] .
package com.mkyong; public class SplitString4 < public static void main(String[] args) < String dir = "apple|9|1.88;2.78|0#10"; String[] output = dir.split("[|;#]"); System.out.println(output.length); // 6 for (String s : output) < System.out.println(s); >/* System.out.println(output[0]); // apple System.out.println(output[1]); // 9 System.out.println(output[2]); // 1.88 System.out.println(output[3]); // 2.78 System.out.println(output[4]); // 0 System.out.println(output[5]); // 10 */ > >
5. Разделите строку и Java 8
5.1 Для потока Java 8 мы можем использовать .Разделенный поток чтобы разделить строку.
package com.mkyong; import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; public class SplitString5a < public static void main(String[] args) < String phone = "299-399-4999"; Listoutput = Pattern.compile("-") .splitAsStream(phone) .filter(x -> !x.equals("399")) .collect(Collectors.toList()); output.forEach(s -> System.out.println(s)); > >
5.2 Мы также можем использовать Arrays.stream для преобразования массива в поток.
package com.mkyong; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class SplitString5b < public static void main(String[] args) < String phone = "299-399-4999"; Listoutput = Arrays.stream(phone.split("-")) .filter(x -> !x.equals(399)) .collect(Collectors.toList()); output.forEach(s -> System.out.println(s)); > >
6. Разделите строку пробелом или несколькими пробелами
Мы можем использовать \\s+ (один или несколько пробелов) для разделения строки пробелами.
package com.mkyong; public class SplitString6 < public static void main(String[] args) < String str = "1 2 3 4 5"; String[] output = str.split("\\s+"); for (String s : output) < System.out.println(s); >> >
7. Разделить строку на новую строку
В другой операционной системе есть другая новая строка
В примере используется регулярное выражение \\r?\\n для разделения строки на новую строку и API потока для обрезки и фильтрации пустой строки.
package com.mkyong; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class SplitString7 < public static void main(String[] args) < StringBuilder sb = new StringBuilder(); sb.append("aaa \n"); sb.append("bbb \r\n"); sb.append("ccc\n"); sb.append("\n"); sb.append("ddd\r\n"); sb.append("\r\n"); sb.append("eee\n"); String text = sb.toString(); System.out.println("---Original---"); System.out.println(text); System.out.println("---Split---"); // split by new line, trim and filter empty line Listlines = Arrays.stream(text.split("\\r?\\n")) .map(x -> x.trim()) .filter(x -> x.length() > 0) .collect(Collectors.toList()); for (String line : lines) < System.out.println(line); >> >
---Original--- aaa bbb ccc ddd eee ---Split--- aaa bbb ccc ddd eee
8. Пример StringTokenizer (устаревший)
В старые времена разработчики Java использовали класс StringTokenizer для разделения строки.
P.S То Строка#разделить() доступен начиная с JDK 1.4.
Примечание Этот StringTokenizer является устаревшим классом, сохраненным по соображениям совместимости; использование не рекомендуется! Пожалуйста, обновите код до строки#split() .
package com.mkyong; import java.util.StringTokenizer; public class SplitString8 < public static void main(String[] args) < String test = "abc.def.123"; // the delimiter is a string, not regex, no need to escape the dot StringTokenizer token = new StringTokenizer(test, "."); while (token.hasMoreTokens()) < System.out.println(token.nextToken()); >> >