2017-10-13 25 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關鍵字。也許你的意思是'最後的字符串noKeywordVariableName = finalnumber.getAttribute(「text」);' –

+0

你的問題似乎還不清楚。你應該對你的查詢更具體。你的代碼很混亂。請提供更多信息。 – MAC

+0

number_check =頁面對象,我試圖循環獲取正則表達式的值,並將數字加在一起。 –

回答

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 s。如果我們將number_check加在一起並且與最終數字相比如果它相等。 –

+0

所以你會把字符串s =「$ 1437.00」 –

+0

不,該參數用於從其他地方調用函數。從你的元素'.getAttribute(「text」)中獲取文本的代碼以'String'的形式傳遞給該函數,並得到處理並以double形式返回。該函數只是將一些字符串像'($ 479.00/check)'變成雙精度型479.00。 – JeffC

相關問題