2017-10-13 4 views
0

私は(number_Check)text value =($ 479.00/check)と呼ばれるページオブジェクトリスト要素を持っています。私は3つの同じ値を持っています。私はそれらを追加し、それが$ 1437.00 == finalnumber要素の完全な数に等しいことをチェックする必要があります。私たちを手伝ってくれますか?私は正規表現で試した。私は最終的な数字と比較する方法を知らない。リストの文字列からすべての番号を見つけて追加し、それが等しいかどうか比較します

List<String> mylist = new ArrayList<String>(); 

String regex = "-?[0-9]+(?:,[0-9]+)?"; 
Pattern p = Pattern.compile(regex); 
for (int i = 0; i < number_check.size(); i++) { 
    String bvalue = number_check.get(i).getAttribute("text"); 
    String cvalue = number_check.get(1).getAttribute("text"); 
    String dvalue = number_check.get(2).getAttribute("text"); 
    String final = finalnumber.getAttribute("text"); 
    Matcher m = p.matcher(bvalue); 
    Matcher c = p.matcher(cvalue); 
    Matcher d = p.matcher(dvalue); 
    double sum = 0; 
    while (m.find()) { 
     mylist.add(m.group(0)); 
     mylist.add(c.group(0)); 
     mylist.add(d.group(0)); 
     sum += Double.parseDouble(m.group(0) + c.group(0) + d.group(0)); 
    } 
    System.out.println(sum); 
} 
+0

変数識別子として「final」を使用することはできません。これはJavaのキーワードです。たぶんあなたは 'final String noKeywordVariableName = finalnumber.getAttribute(" text ");' –

+0

という質問をしているのでしょうか?あなたはより具体的な質問をする必要があります。あなたのコードはとても混乱しています。詳細をご記入ください。 – MAC

+0

number_check = pageオブジェクトと私はregexで値を取得し、数字を一緒に追加するためにループしようとしています。 –

答えて

0

コードにはいくつかの問題があり、これを行うために正規表現は必要ありません。ここには簡単なバージョンがあります。

double actual = 0; 
for (int i = 0; i < number_check.size(); i++) 
{ 
    actual += getDoubleFromString(number_check.get(i).getAttribute("text")); 
} 
double expected = getDoubleFromString(finalnumber.getAttribute("text")); 

Assert.assertEquals(actual, expected); 

...そしてあなたはこのロット再利用する可能性があることから、私は非数字を除去した後、二重に文字列を変換する機能を書きました。

public static double getDoubleFromString(String s) 
{ 
    return Double.parseDouble(s.replaceAll("[^\\d.]", "")); 
} 
+0

私はなぜパラメータでStringを必要とするのか分かりません。 number_checkを一緒に追加し、等しい場合は最終数値と比較します。 –

+0

これで、String s = "$ 1437.00"となります –

+0

いいえ、このパラメータは、関数が他の場所から呼び出されたときに使用されます。 '.getAttribute(" text ")要素からテキストを取得するコードは、その関数に' String'として渡され、処理され、doubleとして返されます。この関数は '($ 479.00/check)'のような文字列をダブル479.00に変換します。 – JeffC

関連する問題