比較Javaの非常に長い文字列が動作しないようです

ボルグシーズン:

アップデート:
文字列の間のチェックであなたの提案を使用して、私はこれらの文字列が実際にJSON文字列であるため、相違点は、いくつかのフィールドの配置にあることが分かりました。

例:
フィールドusername: [email protected]string1の上には先頭に位置していますが、string2の中に途中でどこかに位置しています。2 JSON限り、その内容(フィールド値)が同じよう...かかわらずフィールド/プロパティの配列のオブジェクトをチェックしたり、比較する方法があるのだろうか。

私が何をしようとしました:

private boolean sameJsonObject(Object o1, Object o2) throws IOException {
    if (o1 == null || o2 == null) {
        return false;
    }

    JsonNode json1 = mapper.readTree(mapper.writeValueAsString(o1));
    JsonNode json2 = mapper.readTree(mapper.writeValueAsString(o2));

    return json1.equals(json2);
}

これは動作しますが、私はこれを向上させることができると確信しています。

元の問題:
私は2つの文字列が等しいかどうかを確認したいと思いますが、これらの文字列は、変数/文字列オブジェクトに設定することができませんし、あまりにも長い文字列定数を得るだろうと本当に長いです。

私はそこにあることを知っているequals()equalsIgnoreCase()と、StringUtils.equals(s1, s2)これらのどれも動いていないようにみえます。

私は比較していますという文字列は、2つの異なるソースから来て、それが手動で同じ結果を得る比較(私は内容は同じであることを意味します)。

私はここでサンプル文字列を投稿しようとしましたが、私はできません。比較する各文字列のサイズ以上30K(170K各文字列)です。

ところで、これらの文字列は、実際のデータ(JSON)であり、彼らは本当に巨大であり、私はその平等(コンテンツ)をテストしたいです。

Javaでのチェックを行う方法はありますか?

ありがとう!

GhostCat敬礼モニカC.:

簡単な答えは:charで二つの文字列の文字を比較します。

言い換えれば、ほとんどの場合、Javaの組み込みの文字列を比較する方法はにつながる、正しいです:あなたの入力文字列が等しくありません。同じ文字列がになることは極めてまれであるequals()偽を与えます。

このように、合理的な最初のオプションは次のとおりですので、あなたの比較コードを変更することこと:

  • charで最初の文字列、文字を反復処理
  • 2番目の文字列から対応する文字をフェッチ
  • これらの(どちらかの「フル」に等しい、または無視ケース)とを比較し
  • 不一致に:インデックスと二つの異なる文字を(あなたのような何かを印刷するのに確実に場所をプリントアウトする"<" + thatChar + ">"だけで印刷不能文字を確保するために、または多分Character.getNumericValue()を使用して)

だから、ここの答えは、適切なデバッグを行うために自分自身を有効にするには、基本的にあります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=223029&siteId=1