2013-11-22 3 views
0
java.lang.NumberFormatException: For input string: "10" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Long.parseLong(Long.java:441) 

Соответствующий сегмент кода:ParseLong поднять NumberFormatException

public static class NodeWritable implements Writable { 

    public double msg; 
    public double rank; 
    public String others; 

    public NodeWritable(double msg, double rank, String others) { 
     this.msg = msg; 
     this.rank = rank; 
     this.others = others; 
    } 

    public NodeWritable() { 
     this.msg = 0.0; 
     this.rank = 0.0; 
     this.others = ""; 
    } 

    @Override 
    public void write(DataOutput out) throws IOException { 
     out.writeDouble(msg); 
     out.writeDouble(rank); 
     out.writeChars(others + "\n"); 
    } 

    @Override 
    public void readFields(DataInput in) throws IOException { 
     msg = in.readDouble(); 
     rank = in.readDouble(); 
     others = in.readLine(); 
    } 

    @Override 
    public String toString() { 
     return "" + rank; 
    } 
    } 


    ArrayList<Long> incoming_vids = new ArrayList<Long>(); 
    for (NodeWritable msg : messages) { 
    String in_vid = msg.others.trim(); 
    incoming_vids.add(Long.parseLong(in_vid)); 
    } 

Как это может произойти? Я провел некоторое исследование с Google. Когда-то NumberFormatException, по-видимому, вызвано большими числами. Но я просто не могу найти объяснения по моему делу.

+5

'Long.parseLong (" 10 ");' работает для меня. Просьба представить фактический код, а не только исключение. – noone

+0

может дать код примера, который вы использовали – muthukumar

+1

Одна из возможностей - это символ, не печатный в строке ввода. NumberFormatException - это ** любой ** способ, которым входная строка не является правильно отформатированным представлением числа в анализируемом типе, а не только о большом вводе. –

ответ

0

Вы можете петли на струне in_vid и проверьте, есть ли символ не цифра с помощью этого

for(int i=0;i<in_vid.length();i++) { 
      char ch = in_vid.charAt(i); 
     if(Character.isDigit(ch)) { 
// do something 
} 
    } 

, если его, кроме цифр, то вы можете устранить ее в петлю и передать только строку, которая имеет цифры ,

0

Это действительно расширенный комментарий, а не ответ. Моя гипотеза заключается в том, что проблема заключается в непечатаемом символе во входной строке. Это может быть проверена путем изменения кода:

for (NodeWritable msg : messages) { 
    String in_vid = msg.others.trim(); 
    try{ 
     incoming_vids.add(Long.parseLong(in_vid)); 
    } catch(NumberFormatException e){ 
     System.out.println(e.getMessage()); 
     for(char c : in_vid.toCharArray()){ 
     System.out.println("0x"+Integer.toHexString(c)); 
     } 
    } 
    } 

Этот код должен вызвать символ за символом шестигранной распечатку строки ввода.

Если это встроенный непечатаемый символ, вы, вероятно, должны отклонять строку и фиксировать ее по своему происхождению.