2014-12-22 2 views
0

Итак, я пробовал целую кучу вещей, но я не могу обойти это. id в моем Service класс имеет тип данных long. Я попытался преобразовать serviceAuth в длинный, но он выбрасывает java.lang.NumberFormatException. Как это исправить?Long.parseLong дает java.lang.NumberFormatException

String[] serviceList = getUser.serviceList.split(","); 

for(String serviceAuth: serviceList) { 
    Long temp = Long.parseLong(serviceAuth.toString()); 
    Criteria ctr = sessionFactory.getCurrentSession().createCriteria(Service.class) 
         .add(Restrictions.eq("id",temp)); 
} 

serviceList выглядит следующим образом 5,18,19. Он загружается из файла csv.

При печати значения в течение цикла, это выглядит следующим образом: доклад

1 
2 
14 
15 

Ошибка:

java.lang.NumberFormatException: For input string: "" 
    java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    java.lang.Long.parseLong(Long.java:601) 
    java.lang.Long.parseLong(Long.java:631) 
    org.x.y.gateway.MainController.getUsers(MainController.java:1433) 
    org.x.y.gateway.MainController$$FastClassBySpringCGLIB$$6e5db2d9.invoke(<generated>) 
    org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
    org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) 
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:266) 
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653) 
    org.x.y.gateway.MainController$$EnhancerBySpringCGLIB$$149bedb6.getUsers(<generated>) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:483) 
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721) 
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.x.y.gateway.CrossOriginRequest.doFilter(CrossOriginRequest.java:18) 
+0

Что значение, которое вы передаете, чтобы разобрать? –

+1

Дайте нам образец 'getUser.serviceList', пожалуйста. – Everv0id

+0

@geekchic В соответствии с java Doc он не может содержать синтаксический анализ Строка –

ответ

1

Ваша проблема заключается в том, что одна из строк, созданных split() пуст или содержит пробелы, например

package de.scrum_master.app; 

public class Application { 
    public static void main(String[] args) { 
     String[] serviceList = ",15,18,19".split(","); 
     for (String serviceAuth : serviceList) { 
      Long temp = Long.parseLong(serviceAuth.toString()); 
      System.out.println(temp); 
     } 
    } 
} 
Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Long.parseLong(Unknown Source) 
    at java.lang.Long.parseLong(Unknown Source) 
    at de.scrum_master.app.Application.main(Application.java:7) 

Update: Hot исправить неполадку

Вы должны сделать две вещи:

  • сделать раскол регулярное выражение более устойчивым к начальные и конечные пробелы.
  • Пропустить значения "" в цикле, которые все еще могут возникать в начале массива.
package de.scrum_master.app; 

public class Application { 
    public static void main(String[] args) { 
     String[] serviceList = " , 15 , 18 , 19, ".split("[\\s,]+"); 
     for (String serviceAuth : serviceList) { 
      if ("".equals(serviceAuth)) 
       continue; 
      Long temp = Long.parseLong(serviceAuth.toString()); 
      System.out.println(temp); 
     } 
    } 
} 
15 
18 
19 
+0

Вы правы! Для некоторых пользователей (код здесь находится в более крупном цикле), в «serviceList» могут быть некоторые нулевые значения. Как мне это решить? – geekchic

+0

Я обновил ответ с исправлением. Но кто, черт возьми, отрицал мой ответ, который правильно проанализировал первопричину проблемы ?! – kriegaex

+0

Не знаю! Определенно не был я. Но +1 и я сейчас пытаюсь решить ваше решение. Идея с регулярным выражением! – geekchic

0

Строка вы пытаетесь разобрать не является правильным долго. Исключение также показывает, какая строка вызвала проблему.

+0

Я имею в виду, что я знаю, что что-то не так с строкой, в том числе, какая строка создает проблему ... в этом случае это строка с 'Long.parseLong()', но я не знаю, что то есть, или как я могу это исправить. – geekchic

+0

Скопируйте и вставьте исключение. – Henry

0

Что-то не так с вашими входными данными. "" означает, что строка пуста. Длинные не могут разобрать пустую строку.

0

строка пуста (строка ввода: " "), попробуйте Кодирую его и распечатать результат или предоставить материалы здесь

+0

Ах! Для нескольких пользователей (код здесь находится в более крупном цикле) могут быть некоторые нулевые значения. – geekchic

+0

@geekchic затем добавьте пустую проверку, если строка пуста, не проанализируйте ее – shikjohari

+0

Получил. Попробуем это и обновим с результатами :) – geekchic

Смежные вопросы