HTMLをXMLに解析し、HTMLからのすべてがXMLファイルにあることを検証する必要があるので、検証のためにUnittestsでHamcrestを使用します。 XMLファイルに多かれ少なかれ情報を含めることはできませんので、contains
ではなくequalTo
を使用する正規表現が重要です。問題は解析するが、外部管理されたデータモデルでは許可されていない特定の要素を抽出する必要があるということです。そのようなmigthを行うと、いくつかの場合に余分な空白が追加されることが分かりました(Jsoupと関係があります)。HamCrest isEqualIgnoringWhitespaceが空白を無視しない
スペースが実際のコンテンツには関係しないので、私たちは今のところそれを無視することにしました(純粋にPoCなので)。これを行うために、改行とタブを取り除くすべての空白(\ String.replaceAll("\\s","")
)を取り除くソリューションを考え出しました。すべてのテキストは、1つのStringオブジェクトに連結され、ひどい読み取りになります。また、まったくデバッグすることもできません。代わりに、私はHamcrests IsEqualIgnoringWhitespaceを使用することを選択しました。テストすると、名前のように何もしないことが分かった。コードでは、空白、タブ、改行の削除はありませんが、現在の文字が空白かどうかをチェックし、空白の場合はその前の文字にも空白が含まれているかどうかを確認します。その場合、1つの空白が削除されます。したがって、基本的には空白を2つの単語の間に1つだけ含めるように正規化します。だから、本質的にはそれがすべて空白を無視しない
public String stripSpace(String toBeStripped) {
final StringBuilder result = new StringBuilder();
boolean lastWasSpace = true;
for (int i = 0; i < toBeStripped.length(); i++) {
char c = toBeStripped.charAt(i);
if (isWhitespace(c)) {
if (!lastWasSpace) {
result.append(' ');
}
lastWasSpace = true;
} else {
result.append(c);
lastWasSpace = false;
}
}
return result.toString().trim();
}
:ここ
は、クラスで使用stripSpace
メソッドのコードです。それはなぜこのような名前ですか?私たちはここで互いに一致させたい入力のいくつかの例を与えるために
は空白を持っていますが(テキストはオランダ語であるが、これは問題ではありません)いけないテキストの一部です:
m2
対m 2
(元のHTML:m<sup>2</sup>
)
Tabel 3.1
対Tabel 3 .1
(HTML元:Tabel <a href="link to table">3</a>.1
)これらのテキストよう
は、通常equalTo
マッチャーによって一致することはありませんは実際には名前に基づいてこれと一致する必要がありますが、一致しません。
実際に空白を無視するマッチャーが実際に存在するかどうか分かりますか? Javadoc IsEqualIgnoringWhitespace
によれば