在java:java.lang.NumberFormatException:For input string:;[60.0]”;
我正在调用一个方法来获取一个包含我需要的值的字符串。之后,我尝试将该字符串转换为带有浮点数的数组列表。 其思想是使用for来获取数组的位置,以提交每个值。 但问题是我遇到了这个错误: java.lang.NumberFormatException:对于输入字符串:“[60.0]” 这是我的代码:在java:java.lang.NumberFormatException:For input string:;[60.0]”;,java,Java,我正在调用一个方法来获取一个包含我需要的值的字符串。之后,我尝试将该字符串转换为带有浮点数的数组列表。 其思想是使用for来获取数组的位置,以提交每个值。 但问题是我遇到了这个错误: java.lang.NumberFormatException:对于输入字符串:“[60.0]” 这是我的代码: private String obtenerPrecios (String ids) { System.out.println("ids parametro: :" + ids);
private String obtenerPrecios (String ids) {
System.out.println("ids parametro: :" + ids);
try{
Session session=HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
List<String> listaIds = new ArrayList<String>();
//System.out.println("ids lista: :" + listaIds);
List<String> idsList = Arrays.asList(ids.split(","));
// System.out.println("idsList :" + idsList);
List<Integer> iList = idsList.stream().map(Integer::valueOf).collect(Collectors.toList());
//System.out.println("idsList int :" + iList);
List result = session.createQuery("SELECT p.precioUnidad FROM Productos p WHERE p.id IN :stringIds").setParameterList("stringIds", iList).list();
//System.out.println("resutlado query :" + result);
session.getTransaction().commit();
session.close();
// System.out.println("precios :" + result);
//listaIds.toString();
// System.out.println("lista a string :" + result.toString());
return result.toString();
}catch(Exception e){
e.printStackTrace();
return "error";
}
}
@RequestMapping ( method = RequestMethod.POST )
public String confirmarVenta (@RequestParam(value = "check", required = true) String checkboxValores, Model model){
System.out.println(checkboxValores +": String con ids");
try{
Session session=HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Venta vnt = new Venta();
Productos prdcts = new Productos();
int idVenta = generarID();
// List ids = Arrays.asList(checkboxValores);
System.out.println(checkboxValores +": Array con ids");
// List result = session.createQuery("from Productos where id=" + ids).list();
// System.out.println(result + "result");
for( int i=0; i < checkboxValores.length(); i++){
System.out.println("ids :" + checkboxValores );
int idP;
String precioQ;
idP = Character.getNumericValue(checkboxValores.charAt(i));
System.out.println("idp :" + idP);
precioQ = obtenerPrecios (checkboxValores);
System.out.println("precioQ :" + precioQ);
List<String> idsList = Arrays.asList(precioQ.split(","));
System.out.println("idsList :" + idsList);
Float [] precioLista = idsList.stream().map(Float::valueOf).toArray(Float[]::new);
// System.out.println("precioLista : " +precioLista);
// System.out.println("precioLista get clas : " +precioLista.getClass());
// System.out.println("precioLista I: " +precioLista[i]);
vnt.setFechaVenta(getCurrentDate());
System.out.println(idVenta + ": id venta");
vnt.setIdVenta(idVenta);
// System.out.println(" precio posicion i: " + precioLista.get(i));
// System.out.println(" precio posicion i get class: " + precioLista.get(i).getClass() );
System.out.println("aca llega");
vnt.setMonto(precioLista[i]);
vnt.setIdProducto(idP);
//vnt.setIdUsuario(id); pasar por url el id del empleado y pasarlo como parametro.
session.save(vnt);
model.addAttribute(vnt);
session.getTransaction().commit();
}
session.close();
return "transicionVenta";
}catch(Exception e){
e.printStackTrace();
return"error";
}
}
}
将
列表
转换为字符串
,该字符串将值包装为[]
字符。然后,这些字符会阻止您正确拆分列表
不要这样做,只需返回列表本身,或将其事件强制转换到列表
。这样,您就可以更轻松地进行操作:
private List<String> obtenerPrecios(String ids) {
// ... your retrieval here ...
return (List<String>) result;
}
@RequestMapping ( method = RequestMethod.POST )
public String confirmarVenta(@RequestParam(value = "check") String checkboxValores, Model model) {
// ... your business logic here ...
Float [] precioLista = obtenerPrecios(checkboxValores).stream()
.map(Float::valueOf)
.toArray(Float[]::new);
}
因为i
属于数组checkboxValores
,而您将它用于另一个数组。索引不能保证匹配。当checkboxValores
的大小为2或更多时,很可能会产生IndexOutOfBoundException
顺便说一下,如果您的SQL语句总是要返回一个值,您也可以只返回第一个值:
private String obtenerPrecios(String ids) {
// ... your retrieval here ...
if (result.size != 1) {
throw new IllegalStateException("Single result is expected from database!");
}
return result.get(0);
}
注意:如果出现异常,您不会回滚事务,这可能会导致其他问题
<> P.P.S.:当你已经使用<代码> Spring Framework < /代码>时,考虑使用<代码> jdccDebug < /C> >它将帮助你避免常见错误。尝试< <代码> >或>代码>双::值<代码> >列表IList= IDsList.Stand():map(整型::ValueOf).Cube(收藏家,TristIt());<代码>。将
Integer::valueOf
替换为我先前建议的内容。@Faraz例外情况说明输入包含[
和]
“[60.0]”“不是整数字符串。它是一个浮点数,因此应该使用Double::valueOf
,而不是Integer::valueOf
。但即使这样也会失败,因为[60.0]
根本不是一个数字<代码>60.0是一个数字。所以你需要添加逻辑来删除方括号。@f1sh我刚才注意到了。你好@stepio,谢谢你,我用你给我的信息解决了这个问题。
vnt.setMonto(precioLista[i]);
private String obtenerPrecios(String ids) {
// ... your retrieval here ...
if (result.size != 1) {
throw new IllegalStateException("Single result is expected from database!");
}
return result.get(0);
}