2017-10-13 115 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

相关问题