基于逗号(,)分隔并处理NUmberformatexception </string>拆分List <string>

时间:2014-12-23 11:54:17

标签: java string

我有以下方法applyIncentives采用ListlstIds

public void applyIncentives(List<String> lstIds) throws Exception {
    Session session = null;
    Transaction tx = null;
    String pricingTierId = null;
    if (lstIds != null && lstIds.size() > 0) {
        for (String lstpricingTierIds : lstIds) {
            pricingTierId = lstpricingTierIds.trim();            
        }
    }

    try {
        session = HibernateSessionFactory.getSession();
        tx = session.beginTransaction();

        SQLQuery query = session.createSQLQuery("select * from customer.apply_incentives(:pricingTierId)");
        query.setString("pricingTierId", pricingTierId);
        query.list();

        tx.commit();
        approveFlag = true;
    }
    catch (Exception ex) {
        log.error("Exception", ex);
    }
    finally {
        if (session != null)
            session.close();
    }
    return approveFlag;
}

我从lstIds传递pricingTierId并传递给接受整数的存储过程。

调试lstIds的值时,“52512,85822”两个pricingTierId's以逗号(,)分隔。

在将pricingTierId传递给存储过程之前,我写了以下内容:

String pricingTierId = null ;
if (lstIds != null && lstIds.size() > 0) {
    for (String lstpricingTierIds : lstIds) {
        pricingTierId = lstpricingTierIds.trim();            
    }
}

我的问题:

  1. 如何用分隔符号(,)分割pricingTierId? 由于我通过了列表List<String> lstIds,我无法直接使用pricingTierId = lstpricingTierIds.trim().split(",")

  2. 如果我将String pricingTierId = null更改为String[] pricingTierId,那么 我在query.setString("pricingTierId", pricingTierId);时遇到错误 如果我使用query.setInteger("pricingTierId", Integer.parseInt(pricingTierId));,那么我得到 Numberformat Exception ,因为逗号(,)被传递给存储过程。

  3. 添加了建议的代码

    List<String> pricingTierId = null;
    if (lstIds != null && lstIds.size() > 0) {
        for(String lstpricingTierIds : lstIds) {
            pricingTierId = Arrays.asList(lstpricingTierIds.trim().split(","));
        }
    }
    

    但是我收到错误:

    query.setString("pricingTierId", pricingTierId);
    

    setString不能用于String[]

    我无法使用query.setInteger("pricingTierId", Integer.parseInt(pricingTierId)); 正如它所说的将pricingTierId的类型更改为String

1 个答案:

答案 0 :(得分:1)

如何将它从分割中创建的数组中取出然后循环:

String[] pricingTierIdArray = lstpricingTierIds.trim().split(",");
for(String s : pricingTierIdArray ) {
    query.setInteger("pricingTierId", Integer.parseInt(s));
}

setInteger()方法会覆盖以前的值。除非您更改查询,否则只能设置一个ID。

或者只是:

String pricingTierIdArray = lstpricingTierIds.trim().split(",")[0]; //This depends on whether you need both values or not.