我有一个字符串,它是String
和Regex
的组合。我想拆分给定的字符串并将其存储到Array
中,但不想拆分正则表达式。正则表达式可以出现在字符串中的任何位置。 /
表示正则表达式模式的开始和结束。
示例:
Hello world /[0-9]{4}[ K][a-z]{2}/
/^[a-z]{5,10}/ meetings
Start /[A-Z]) ^[0-9]{3}/ prepration
这是我现在拥有的
private static final Pattern ignoreSpaceInRegex =
Pattern.compile("\\s+", Pattern.UNICODE_CHARACTER_CLASS);
public static String[] getEachWord(String givenString) {
return ignoreSpaceInRegex.split(givenString);
}
答案 0 :(得分:1)
您可以将任务切换为使用正则表达式来代替Pattern.split()
,该正则表达式将查找字符串中的所有单词。因此,您可以使用以下正则表达式:
/[^/]+?/|\S+
这匹配一个正则表达式(假设它以/
开始和结束)或一个单词(没有空格)。这是完整的方法:
private static final Pattern FIND_WORDS_PATTERN =
Pattern.compile("/[^/]+/|\\S+", Pattern.UNICODE_CHARACTER_CLASS);
public static List<String> getEachWord(String givenString) {
List<String> words = new ArrayList<>();
Matcher m = FIND_WORDS_PATTERN.matcher(givenString);
while (m.find()) {
words.add(m.group());
}
return words;
}
您的示例的结果如下:
Hello world /[0-9]{4}[ K][a-z]{2}/
:
["Hello", "world", "/[0-9]{4}[ K][a-z]{2}/"]
/^[a-z]{5,10}/ meetings
:
["/^[a-z]{5,10}/", "meetings"]
Start /[A-Z]) ^[0-9]{3}/ prepration
:
["Start", "/[A-Z]) ^[0-9]{3}/", "prepration"]