的Java由空格和标点符号分割字符串,但只包括结果标点符号
hello-world how are you?
的Java由空格和标点符号分割字符串,但只包括结果标点符号
应导致
hello
-
world
how
are
you
?
这是我尝试
String str = "Hello-world how are you?";
Arrays.stream(str.split("\\b+")).forEach(System.out::println);
使用split
的代码,这打破了在分离器中。对任何Unicode空格或向前看符号的帮助,如果一个或下一个字符是一个标点符号它断言
String str = "hello-world how are you?";
Arrays.stream(str.split("\\p{javaWhitespace}+|(?=\\p{P})|(?<=\\p{P})")).forEach(System.err::println);
这里\\p{Z}+|(?=\\p{P})|(?<=\\p{P})
分裂:
public static void main(String[] args) {
String test = "hello - word bla bla bla";
String[] values = test.split(" ");
for (String element : values) {
System.out.println(element);
}
}
'hello-world' is connected – user3833308
see StringTokenizer https://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html – Pr3ds
String str = "Hello-world how are you?";
Arrays.stream(str.split("\\b+")).forEach(w -> {
if (!w.equals(" "))
System.out.println(w);
});
要消除'if',你可以简单地使用'filter'。这将允许你写你的解决方案为'Arrays.stream(str.split(“\\ b +”))。filter(w - >!w.equals(“”))。forEach(System.out :: println) ;'。 – Pshemo
一个更简单的正则表达式的解决方案是可能的一个匹配方法:
String str = "Hello-world how are yóu?";
List<String> res = new ArrayList<>();
Matcher m = Pattern.compile("(?U)\\w+|\\p{Punct}").matcher(str);
while (m.find()) {
res.add(m.group());
}
System.out.println(res);
// => [Hello, -, world, how, are, yóu, ?]
见T他Java demo
详细:
-
(?U)
- 一个Pattern.UNICODE_CHARACTER_CLASS
改性剂(使\w
可以匹配Unicode字母) -
\\w+
- 1+字字符(字母,数字,或_
- 可以用[\\w&&[^_]]
或[^\\W_]
) -
|
- 或 -
\\p{Punct}
- 标点符号(可能会替换为[\\p{P}\\p{S}]
)。
请提供您的代码,我并不真正了解您的问题 – ronald8192
至少在您的输入 – anubhava
@ronald添加代码中添加'hello'。希望你现在能够理解问题 – user3833308