我有如下的字符串,我想获得subString如果有任何特殊字符。
String myString="Regular $express&ions are <patterns <that can@ be %matched against *strings";
我想要像下面那样
express
inos
patterns
that
matched
Strings
任何人帮助我。谢谢你提前
答案 0 :(得分:3)
注意: 正如@MaxZoom所指出的,似乎我没有正确理解OP的问题。 OP显然不希望将字符串拆分为特殊字符,而是保持以特殊字符开头的单词。前者对我的回答很贴切,后者是@ MaxZoom的回答。
您应该查看String.split()方法。
给它一个匹配你想要的所有字符的正则表达式,你将得到你想要的所有字符串的数组。例如:
String myString = "Regular $express&ions are <patterns <that can@ be %matched against *strings";
String[] words = myString.split("[$&<@%*]");
答案 1 :(得分:3)
此正则表达式将选择以特殊字符开头的单词:
[$&<%*](\w*)
说明:
[$&<%*] match a single character present in the list below
$&<%* a single character in the list $&<%* literally (case sensitive)
1st Capturing group (\w*)
\w* match any word character [a-zA-Z0-9_]
Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
g modifier: global. All matches (don't return on first match)
比赛1 [9-16]
express
比赛2 [17-21]ions
比赛3 [27-35]patterns
第4章[37-41]that
第5章[51-58]matched
比赛6 [68-75]strings
Java代码中的解决方案:
String str = "Regular $express&ions are <patterns <that can@ be %matched against *strings";
Matcher matcher = Pattern.compile("[$&<%*](\\w*)").matcher(str);
List<String> words = new ArrayList<>();
while (matcher.find()) {
words.add(matcher.group(1));
}
System.out.println(words.toString());
// prints [express, ions, patterns, that, matched, strings]