2016-07-04 16 views
1

私が必要とするのは、文字列内の各単語をエスケープして、!、?。 '@のように各特殊文字をエスケープすることです。私が試したことはこれです:文字列から s(スペース文字)をどのようにエスケープできますか?

public class Solution 
{ 
    public static void main(String[] args) 
    {  
     Scanner scan = new Scanner(System.in); 
     Pattern pat = Pattern.compile("[!|,|?|.|_|'|@]"); 
     String a = scan.nextLine(); 
     scan.close(); 
     String[] part = pat.split(a); 
     System.out.println(part.length); 
     for(String p: part) 
      System.out.println(p); 
    } 
} 

これは特殊文字をエスケープしていますが、私は正規表現は、各単語の間のスペースに合わせ持ってする方法を見つけるために管理することはできません。 また、正規表現の後に\s\\sを使ってみました。

のように入力するために

:出力があるべきThe dog is a very lazy dog, isn't he?

The 
dog 
is 
a 
very 
lazy 
dog 
isn 
t 
he 

答えて

2

[..]は、単一の文字の範囲を説明しcharacter class、ない2つの文字である(私たちは+*{nim,max}のようなが、その数量と文字の繰り返しを許可することができますここには該当しません)。

また|[..]の中に使用する必要はありません。単純な文字であり、OR演算子ではないからです。だから、[a|b]a OR bを意味するものではありません、それは(そう|cよう|のいずれかの繰り返しが別の|cを表します)文字a|bを表します。

あなたが提供した例に基づいて、あなたが探していることがあります。

Pattern pat = Pattern.compile("[!,?._'@\\s]+"); 

またはこれ以降は、より読み

Pattern pat = Pattern.compile("([!,?._'@]|\\s)+"); 

かもしれあなたは[..]の外ORオペレータ|を使用する必要があると書きます\sとして"\\s\も文字列リテラルの特殊文字です(これは、たとえば、タブ文字を作成するために使用できます)。)ので、エスケープする必要があります。

(..)で式全体をラップして、すべての区切り文字を表すグループを作成しました。これにより、+( "1つ以上のオカレンス"を表す量子)を使用できるようになりました。正規表現では、分割のための単一の区切り文字として,.が表示されます。 。だから"a,.b"の代わりに - ["a, "", "b"]を取得する["a", "b"]

+0

私はあなたが "キャラクター。しかし、これはまだ文字列内の各スペースをエスケープしません。 –

+0

「文字列の各スペースをエスケープする」とはどういう意味ですか?あなたの質問を更新し、あなたの入力と期待される結果を投稿できますか? – Pshemo

+0

@MinaF編集されたバージョンがあなたに役立つかどうか教えてください。もしそうなら説明を追加しようとします。 – Pshemo

関連する問題