Java split по скобке

Как разбить строку в 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() .

Читайте также:  Passing arguments by reference in php

Обратите внимание, что это не принимает регулярное выражение. Для этого используйте 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)

  1. Разделить строку
  2. Разделить строку по ограничению
  3. Разделение строки специальными символами регулярного выражения
  4. Разделите строку несколькими разделителями
  5. Разделите строку и Java 8
  6. Разделить строку пробелами
  7. Разделить строку на новую строку
  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 специальных символов имеют особое значение:

  1. Точка или точка .
  2. Знак плюс +
  3. Звездочка или звезда *
  4. Знак вопроса ?
  5. Каретка ^
  6. Знак доллара $
  7. Открывающая и закрывающая скобки ( и )
  8. Открывающая квадратная скобка [
  9. Открывающая фигурная скобка
  10. Символ трубы |
  11. Обратная косая черта \

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()); >> >

Источник

Оцените статью