2

皆さん、

Java での String 比較 (間に空白スペースあり) に少し疑問があります。

ユースケース:-
次の Solr クエリ文字列を検討してください:-

  String query = ".....&ansDt:[* TO *]....";

ansDt の有効な形式は次のとおりです。

  1. ansDt : [* TO *]
  2. ansDt : [someDate TO *]
  3. ansDt : [* TO someDate]
  4. ansDt : [someDate TO otherDate]

私には2つの疑問があります:-

  • ここで、クエリ文字列の4th ansDt形式のみをチェックする方法が必要です。他の形式が検出された場合 (つまり、フィールド*でパターンが検出された場合ansDt)、コンソールにメッセージをスローする必要があります。

  • ansDtまた、 & :&間の空白に関係なく、1 番目、2 番目、3 番目のケースをチェックする必要があります[ansDt: [* TO *]ansDt :[* TO *]ansDt : [ * TO *]などはすべて同じと見なされます

String.trim( )文字列の先頭と末尾の空白のみを削除するため、使用できません

Java String comparison でそれを確認するにはどうすればよいですか?

ありがとう

4

4 に答える 4

3

この正規表現を試してください:

String query = ".....&ansDt:[* TO *]....";

String pattern = ".*ansDt[\\ ]*[:][\\ ]*[\\[].*[\\ ]+TO[\\ ]+.*[\\]].*"; 

boolean test = query.matches(pattern);

追加情報:

. matches any character

.* matches any amount of characters

[\ ] matches space

[\ ]+ matches one or more spaces, used between "TO"

[\ ]* matches any amount of spaces, used between ":"

[\[] and [\]] matches "[" and "]"
于 2012-09-12T10:47:48.957 に答える
1

正規表現は行く方法です。しかし、簡単な修正のために試すことができます

    String query = ".....&ansDt : [ * TO *]...."; 
    int indexOfansDt = query.indexOf("ansDt");
    int indexOfBeginBracket = query.indexOf("[",indexOfansDt);
    int indexOfEndBracket = query.indexOf("]",indexOfBeginBracket);
    String yourString = query.substring(indexOfBeginBracket, indexOfEndBracket+1);
    System.out.println(yourString);

を確認yourStringしてください。形式が 1、2、または 3 でindexOf("*")ない場合は確認してください。-1

于 2012-09-12T09:46:44.113 に答える
0

単純な正規表現よりも複雑なものが必要になります。あなたは 4 行の文法に相当するものを書きました。パーサー ジェネレーターが行うアプローチを採用する必要があります。それをトークン化し、ルールを実行して、トークンが文法に一致するかどうかを確認します。

パーサー ジェネレーターの大きなハンマーに耐えられる場合は、ANTLR をお勧めします。

于 2012-09-12T09:25:15.993 に答える
0

これは行う必要があります(文字列s1およびの場合s2):

s1.replace(" ", "").equals(s2.replace(" "), ""))
于 2012-09-12T09:25:28.297 に答える