Вы можете использовать
String[] results = s.split("\\s*[()]\\s*");
См. Демоверсию regex
Детали шаблона
\\s*
- 0+ пробелов [()]
- )
или (
\\s*
- 0+ пробелов
Если ваши строки всегдав указанном формате (без скобок, (...)
, без скобок) у вас будет:
Name with space = results[0]
The values inside the brackets = results[1]
The CONST value after the brackets = results[2]
Если вы хотите более контролируемый подход, используйте соответствующее регулярное выражение:
Pattern.compile("^([^()]*)\\(([^()]*)\\)(.*)$")
См. regex demo
Если вы используете его с Matcher#matches()
, вы можете опустить ^
и $
, так как этот метод требует полного совпадения строки.
Java demo :
String regex = "^([^()]*)\\(([^()]*)\\)(.*)$";
String s = "flow gavage(ZAB_B2_COCUM) BS";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
if (matcher.matches()){
System.out.println(matcher.group(1).trim());
System.out.println(matcher.group(2).trim());
System.out.println(matcher.group(3).trim());
}
Здесь шаблон означает:
^
- начало строки (неявно в .matches()
) ([^()]*)
- Группа захвата 1: любые 0+ символов, кроме (
и )
\\(
- a (
([^()]*)
- Захватгруппа 2: любые 0+ символов, кроме (
и )
\\)
- a )
(.*)
- Captuгруппа звонков 3: любые 0+ символов, как можно больше, до конца строки (используйте ([^()]*)
, если вам нужно ограничить (
и )
в этой части тоже). $
- конец строки (неявный в .matches()
)