2016-11-07 5 views
0

SCENARIO:Javaのパターンの使用

Pattern whitespace = Pattern.compile("^\\s"); 
matcher = whitespace.matcher(" WhiteSpace"); 

Pattern whitespace2 = Pattern.compile("^\\s\\s"); 
matcher2 = whitespace2.matcher(" WhiteSpace"); 

私は、行の先頭に空白を取得しようとしています。私は正確な空白のマッチャーの数を取得したい。私の文字列は" WhiteSpace"です。
この文字列にはmatchermatcher2の両方の問題があります。

私がしたいのは:
1つの空白だけを取得するパターンですが、このパターンは2つの空白文字列に対しては機能しません。以下のシナリオでは、matcher.find()matcher2.find()の両方が該当します。しかし、matcher.find()はfalseでなければなりません。matcher2.find()は真でなければなりません。

私はマッチャは、" WhiteSpace"ため" WhiteSpace"(2つのスペース)のための真偽になりたい
私はmatcher2がために真になりたい:" WhiteSpace"


私がしたいことは、
私は文字列" two whitespaces"を持っています。
両方のif文が真になります。 matcherはfalseにする必要があります。 matcher2がtrueである必要があります。

Pattern whitespace = Pattern.compile("^\\s"); 
matcher = whitespace.matcher(" two whitespaces"); 

Pattern whitespace2 = Pattern.compile("^\\s\\s"); 
matcher2 = whitespace2.matcher(" two whitespaces"); 

if(matcher.find()==true){ 
    //XXXXXXXXXXX 
} else if(matcher2.find()==true){ 
    //YYYYYYYYYYY 
} 

答えて

1

使用すると、1つの空白の後に(関係なく、それが空白だったりしていない場合)そこには別の空白がありませんが、あなたが実際にあなたが試合でテストする、第2の文字を含めることがないようにしたい場合は、 negative lookahead機構(?!..)を使用できます。

だから、

Pattern whitespace = Pattern.compile("^\\s(?!\\s)"); 

のように見えるかもしれ後に、それはこのスペース

Pattern whitespace = Pattern.compile("^\\s{3}(?!\\s)"); 
+0

ありがとうPshemo。 – ivbtar

1
により、任意の数に適合させることができる別の空白を持っていない場合、行の先頭に空白のみを一致させることができますパターン

パターンはここでは過剰なものかもしれません*。 Character.isWhitespaceを使用し、シンプルなコードを取得する:それは言われている*について

String in = " your input here"; 
int wsPrefix=0; 
for (; wsPrefix < in.length() && Character.isWhitespace(in.charAt(wsPrefix)) ; 
     wsPrefix++) {} 
System.out.println("wsPrefix = " + wsPrefix); 

を私は知っている、私は正規表現を使用します「一部の人々は、問題に直面したとき、 と思います」。 "今は2つの問題があります。 - Jaimie Zawinski, 1997