2017-04-07 13 views
0

hello-world how are you?Javaは空白や句読点で文字列を分割が、結果にのみ句読点を含め

をこれは私がこれを破った、splitを使用

String str = "Hello-world how are you?"; 
Arrays.stream(str.split("\\b+")).forEach(System.out::println); 
+3

あなたのコードを提供してください、私は本当にあなたの質問を理解していません – ronald8192

+1

あなたの入力に 'hello'を少なくとも追加してください。 – anubhava

+0

@ronald added code。 – user3833308

答えて

2

あなたは、分割のために、この正規表現を使用することができます。

ここ
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})分割を任意のUnicodeの空白文字の上または前または次の文字が区切り文字であれば、それは主張する先読みの助けを借りて。

RegEx Demo

出力:

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:

hello 
- 
world 
how 
are 
you 
? 
+2

空白ではありません。 '\ p {Z}'はタブと一致しません。 –

+0

あなたはそうです。 '\ p {java} 'は' \ p {Z} 'よりも優れています。 – anubhava

-1

をしようとしたコードである

hello 
- 
world 
how 
are 
you 
? 

になるはずですセパレータ内にある。

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); 
     } 

    } 
+0

'hello-world'が接続されています。 – user3833308

+0

StringTokenizerを参照してください。 https://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html – Pr3ds

1
String str = "Hello-world how are you?"; 
Arrays.stream(str.split("\\b+")).forEach(w -> { 
    if (!w.equals(" ")) 
     System.out.println(w); 
}); 
+0

' if'を削除するには 'filter'を使います。これは、あなたの解を 'Arrays.stream(str.split(" \\ b + "))と書くことを可能にしますfilter(w - >!w.equals(" "))forEach(System.out :: println) ; '。 – Pshemo

1

はるかに簡単な正規表現ソリューションは、マッチングアプローチで可能です彼Java demo

詳細

  • (?U) - Pattern.UNICODE_CHARACTER_CLASS修飾子(\wは、Unicode文字を一致させることができるように)
  • \\w+ - 1+ワード文字(文字、数字、または_ - することができ[\\w&&[^_]]または[^\\W_]を使用して減算)
  • | - または
  • \\p{Punct} - 句読記号([\\p{P}\\p{S}]で置き換えることができます)。