Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据特殊字符生成子字符串?_Java - Fatal编程技术网

Java 如何根据特殊字符生成子字符串?

Java 如何根据特殊字符生成子字符串?,java,Java,我有如下字符串,如果有特殊字符,我想得到子字符串 String myString="Regular $express&ions are <patterns <that can@ be %matched against *strings"; 任何人都可以帮助我。提前谢谢。注意:正如@MaxZoom所指出的,我似乎没有正确理解OP的问题。OP显然不希望在特殊字符上拆分字符串,而是希望保留以特殊字符开头的单词。前者由我的答案回答,后者由@MaxZoom的答案回答 你应该看看这

我有如下字符串,如果有特殊字符,我想得到子字符串

 String myString="Regular $express&ions are <patterns <that can@ be %matched against *strings";
任何人都可以帮助我。提前谢谢。

注意:正如@MaxZoom所指出的,我似乎没有正确理解OP的问题。OP显然不希望在特殊字符上拆分字符串,而是希望保留以特殊字符开头的单词。前者由我的答案回答,后者由@MaxZoom的答案回答


你应该看看这个方法

给它一个匹配所有字符的regexp,就会得到一个包含所有字符串的数组。例如:

String myString = "Regular $express&ions are <patterns <that can@ be %matched against *strings";
String[] words = myString.split("[$&<@%*]");

String myString=“Regular$express&ions是此正则表达式将选择以特殊字符开头的单词:

[$&<%*](\w*)

如果有任何特殊字符,我希望字符串中有该单词,我必须在我的项目中使用它。为什么没有
can
(基于
can@
)结果呢?随答案一起提供的实现将是cool@KalyanChavali是的,这是正在进行的;-)不过,我通常不喜欢在这类家庭作业/项目/学校问题中把所有内容都交给OP。感谢重播Joffrey,它帮了我很多忙。谢谢这个解决方案将创建一个包含不需要的单词的数组,例如
Re古拉尔,是,是
,这不是OP想要的。
[$&<%*](\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)
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]