2

重複の可能性:
「.」の一致 Javaで

1.2.4分割したい文字列があり、取得2した別の文字列と比較します。

私は次のことをしようとしています

    StringTokenizer old_ver = new StringTokenizer(oldVersion, ".");
    int oldVer = Integer.parseInt(old_ver.nextToken());
    oldVer = Integer.parseInt(old_ver.nextToken());

    StringTokenizer new_ver = new StringTokenizer(newVersion, ".");
    int newVer = Integer.parseInt(new_ver.nextToken());
    newVer = Integer.parseInt(new_ver.nextToken());

    if (oldVer == newVer) {
        return true;
    }

を使用してそれを行うより良い方法はありますか.Split()

4

2 に答える 2

6

問題は、正規表現の "." です。は一文字です。\\.したがって、" "を使用してエスケープする必要があります。

同様に、使用できます

string.split("\\.");

編集:

split()Stringクラスのメソッドは、通常 Java で正規表現に使用される API であるPatternand を内部的に使用します。Matcher

したがって、問題はありませんsplit

于 2013-01-19T10:50:13.393 に答える
1

あなたのコードでは、1.2.1 は 3.2.0 と「互換性」があります。これは、使用するString.splitかどうかに関係なく、深刻な問題のように見えます。また、等しいかどうかのみを比較するため、バージョン番号を整数に解析する必要はありません。

 StringTokenizer old_ver = new StringTokenizer(oldVersion, ".");
 StringTokenizer new_ver = new StringTokenizer(newVersion, ".");
 return (old_ver.nextToken().equals(new_ver.nextToken() && 
         old_ver.nextToken().equals(new_ver.nextToken() );

あなたもきっとそうすることができString.splitます:

   String [] oldV = String.split(oldVersion,"\\.");
   String [] newV = String.split(newVersion,"\\.");

   return oldV[0].equals(newV[0]) && oldV[1].equals(newV[1]);

このString.split()バージョンは少し短いように見えますが、私にとっては読みにくいように見えます。理由は次のとおりです。

  • ドット (.) は予約文字であり、エスケープする必要があるという追加の思考ステップが必要です。
  • 「次の要素と次の要素」は、「位置 0 の要素と位置 1 の要素」よりも思考の労力が少ないようです。

「1.2.4以降」のようなテストを行うことができる方法で、最初にバージョン番号のメジャー部分、次に中間部分、次にマイナー部分を比較するバージョンコンパレーターを用意することは有益かもしれません。

于 2013-01-19T11:01:14.370 に答える