Java hashmap提供null值,即使键和值不为null
我编写了一个代码,从表中获取值,并将其放入带有键值对的映射中,然后返回映射。Java hashmap提供null值,即使键和值不为null,java,null,hashmap,Java,Null,Hashmap,我编写了一个代码,从表中获取值,并将其放入带有键值对的映射中,然后返回映射。 public Map<String, BigDecimal> fnFetchCartSummary() throws Exception { Map<String, BigDecimal> mCartSummaryMap = new HashedMap<String, BigDecimal>(); int iCartCount = client.get
public Map<String, BigDecimal> fnFetchCartSummary() throws Exception {
Map<String, BigDecimal> mCartSummaryMap = new HashedMap<String, BigDecimal>();
int iCartCount = client.getElementCount(CartTotal);
if (iCartCount > 1) {
client.ValidateTest(true, "Service charges are getting displayed for Cart. Total entries = " + iCartCount);
for (int i = 1; i <= iCartCount; i++) {
String sVariablexpath = sRowKey.replaceAll("<REPLACE>", Integer.toString(i));
String sVariableName = client.getText(sVariablexpath).replace(":", "");
String sCharges = RowValue.replaceAll("<REPLACE>", Integer.toString(i));
double sPrice =Double.parseDouble( client.getText(sCharges).replaceAll("[^0-9.]+", ""));
BigDecimal bdPrice = new BigDecimal(sPrice);
mCartSummaryMap.put(sVariableName, bdPrice);
}
}
return mCartSummaryMap;
}
但当我试图捕捉同一张地图并试图从中获取价值时
Map<String, BigDecimal> mCartValue1 = client.shoppingCart.fnFetchCartSummary();
BigDecimal Subtotal1_1 = mCartValue1.get("Subtotal");
System.out.println(Subtotal1_1);
Map mCartValue1=client.shoppingCart.fnFetchCartSummary();
BigDecimal小计1_1=mCartValue1.get(“小计”);
系统输出打印LN(小计1_1);
它会像这样为每个键值对显示null
{MPVPERTKTF=10, Subtotal=1200, MPVEVTF=15, Total Amount Due=1227, MPV SC001 SPD=2}
空的
如果有人遇到同样的问题,请向我建议一个解决方案。我已经用示例演示进行了尝试。这对我来说很好
HashMap
而不是HashedMap
或验证什么是HashedMap
实现String sCharges=RowValue.replaceAll(“,Integer.toString(i))代码>行正确返回金额值,如$1200
公共类TestHashMap{
公共静态void main(字符串[]args){
Map mCartValue1=fnFetchCartSummary();
BigDecimal小计1_1=mCartValue1.get(“小计”);
系统输出打印LN(小计1_1);
}
公共静态映射fnFetchCartSummary(){
Map mCartSummaryMap=newhashmap();
//字符串sCharges=“Rs1200”;
double sPrice=double.parseDouble(“Rs1200.replaceAll”([^0-9.]+”,“);
BigDecimal bdPrice=新的BigDecimal(sPrice);
mCartSummaryMap.put(“MPVPERTKTF”,新的BigDecimal(10));
mCartSummaryMap.put(“小计”,bdPrice);
mCartSummaryMap.put(“MPVEVTF”,新的BigDecimal(15));
mCartSummaryMap.put(“到期总金额”,新的BigDecimal(1227));
返回MCARTSUMARYMAP;
}
}
我尝试了示例演示。这对我来说很好
HashMap
而不是HashedMap
或验证什么是HashedMap
实现String sCharges=RowValue.replaceAll(“,Integer.toString(i))代码>行正确返回金额值,如$1200
公共类TestHashMap{
公共静态void main(字符串[]args){
Map mCartValue1=fnFetchCartSummary();
BigDecimal小计1_1=mCartValue1.get(“小计”);
系统输出打印LN(小计1_1);
}
公共静态映射fnFetchCartSummary(){
Map mCartSummaryMap=newhashmap();
//字符串sCharges=“Rs1200”;
double sPrice=double.parseDouble(“Rs1200.replaceAll”([^0-9.]+”,“);
BigDecimal bdPrice=新的BigDecimal(sPrice);
mCartSummaryMap.put(“MPVPERTKTF”,新的BigDecimal(10));
mCartSummaryMap.put(“小计”,bdPrice);
mCartSummaryMap.put(“MPVEVTF”,新的BigDecimal(15));
mCartSummaryMap.put(“到期总金额”,新的BigDecimal(1227));
返回MCARTSUMARYMAP;
}
}
这是不可能的。我确信您正在做其他事情。因为我已经为特定工具编写了此代码。从java的角度来看,您能详细说明这里的问题吗?您能使用调试器检查mapmCartValue1
包含哪些元素吗?(或者简单地打印出来)看起来像是从某个外部资源(可能是DOM或类似的东西)获取映射的字符串值。显示为“小计”的字符串很可能在该版本中包含一些不可见的字符。打印出每个键的长度,并对照文本进行目视检查,以验证其中没有不可见的字符。可以执行System.out.println(mCartValue1)吗代码>在BigDecimal小计1\u 1=mCartValue1.get(“小计”)前面的行上代码>并将其添加到您的帖子中。这是不可能的。我确信您正在做其他事情。因为我已经为特定工具编写了此代码。从java的角度来看,您能详细说明这里的问题吗?您能使用调试器检查mapmCartValue1
包含哪些元素吗?(或者简单地打印出来)看起来像是从某个外部资源(可能是DOM或类似的东西)获取映射的字符串值。显示为“小计”的字符串很可能在该版本中包含一些不可见的字符。打印出每个键的长度,并对照文本进行目视检查,以验证其中没有不可见的字符。可以执行System.out.println(mCartValue1)吗代码>在BigDecimal小计1\u 1=mCartValue1.get(“小计”)前面的行上
并将其添加到您的帖子谢谢您的回复,我在这一行找到了错误字符串sVariableName=client.getText(sVariablexpath.replace(“:”,”);它将获取带有空格的键名,并在修剪后工作正常。调试时,它将正确显示,但在打印映射时,我们将了解额外的空间。感谢您的响应,我在此行中发现了错误字符串sVariableName=client.getText(sVariablexpath)。替换(“:”,”);它将获取带有空格的键名,在修剪后,它工作正常。调试时,它将正确显示,但在打印地图时,我们将了解额外的空间。
public class TestHashMap {
public static void main(String[] args) {
Map<String, BigDecimal> mCartValue1 = fnFetchCartSummary();
BigDecimal Subtotal1_1 = mCartValue1.get("Subtotal");
System.out.println(Subtotal1_1);
}
public static Map<String, BigDecimal> fnFetchCartSummary() {
Map<String, BigDecimal> mCartSummaryMap = new HashMap<String, BigDecimal>();
//String sCharges = "Rs1200";
double sPrice =Double.parseDouble( "Rs1200".replaceAll("[^0-9.]+", ""));
BigDecimal bdPrice = new BigDecimal(sPrice);
mCartSummaryMap.put("MPVPERTKTF", new BigDecimal(10));
mCartSummaryMap.put("Subtotal", bdPrice);
mCartSummaryMap.put("MPVEVTF", new BigDecimal(15));
mCartSummaryMap.put("Total Amount Due", new BigDecimal(1227));
return mCartSummaryMap;
}
}