Строго переводится
Для простоты я собираюсь интерпретировать указание на "пробел" (
) как "любой пробел" (\s
).
Перевод вашегоБолее или менее "слово в слово" - это разделение любого из:
- 1 или более пробелов
- 0 или более пробелов (
\s*
), за которыми следует запятая (,
), за которыми следуют 0 или более пробелов (\s*
) - 0 или более пробелов (
\s*
), за которыми следует "=>" (=>
), за которыми следуют 0 или более пробелов (\s*
)
Для соответствия любому из вышеперечисленного: (\s+|\s*,\s*|\s*=>\s*)
Сокращенная форма
Однако, ваша спецификация может быть "уменьшена" до:
- 0 или более пробелов
- , за которыми следует пробел, запятая или "=>"
- , за которыми следуют 0 или более пробелов
Соберите все вместе: \s*(\s|,|=>)\s*
Сокращенная форма обходит некоторые угловые случаи со строго переведенной формой, которая делает неожиданные пустые «совпадения».
Код
Вот некоторый код:
import java.util.regex.Pattern;
public class Temp {
// Strictly translated form:
//private static final String REGEX = "(\\s+|\\s*,\\s*|\\s*=>\\s*)";
// "Reduced" form:
private static final String REGEX = "\\s*(\\s|=>|,)\\s*";
private static final String INPUT =
"one two,three=>four , five six => seven,=>";
public static void main(final String[] args) {
final Pattern p = Pattern.compile(REGEX);
final String[] items = p.split(INPUT);
// Shorthand for above:
// final String[] items = INPUT.split(REGEX);
for(final String s : items) {
System.out.println("Match: '"+s+"'");
}
}
}
Вывод:
Match: 'one'
Match: 'two'
Match: 'three'
Match: 'four'
Match: 'five'
Match: 'six'
Match: 'seven'