当前位置:编程学习 > JAVA >>

求高手点拨一个“睁眼看呆”的java数据类型不匹配.的异常修改方案.

高手,您好:
     我碰到了一个错误:
     
     (图1)
     上面的第195行,点击后,看到的代码如下:
     
     (图2)
     我的上述代码读取的本地数据内容在这里:
     
     图2中的第195行代码的“MyBJMemUserAuthorizeTime”对象,他的类型我定义如下:
     

import java.util.*;
public class MyArrayList{

    /**
 * 
 */
private static final long serialVersionUID = 1L;
ArrayList<Long> list = new ArrayList<Long>();
    
    public void add(long value){
        list.add(value);
    }

    public void calculate(int index, long value){
        if(index >= list.size()){
            throw new RuntimeException("下标越界 " + index);
        }
        list.set(index, list.get(index) + value);
    }
    
    public void put(Integer MyNum,long times){
     list.set(MyNum, times);
    }
    
    public long get(int index){
     try {
         return list.get(index);
     }catch(Exception ex) {
       return -1;
     }
    }
}

    (图2中的“ReadTxt类”他的代码如下..:)
    
import java.io.BufferedReader;   
import java.io.FileReader;   
import java.io.IOException;   
import java.util.ArrayList;
   
public class ReadTxt {   
static String MyKey = "CJCO008";
  static ArrayList<String> logData = new ArrayList<String>();
static String text = null;

    public static void read(String filePath) {   
         try {   
              FileReader input = new FileReader(filePath);   
              BufferedReader br = new BufferedReader(input);   
              while (( text = br.readLine()) != null) {
               logData.add(text);
              }   
              br.close();   
              input.close();   
        } catch (IOException e) {   
              e.printStackTrace();   
        }   
     } 
    
    public static void readCyrpt(String filePath) {   
        try {   
             FileReader input = new FileReader(filePath);   
             BufferedReader br = new BufferedReader(input);   
             while (( text = br.readLine()) != null) {   
              String text0 = Systemcrypt.HloveyRC4(text, MyKey);
              logData.add(text0);
             }   
             br.close();   
             input.close();   
       } catch (IOException e) {   
             e.printStackTrace();   
       }   
    }  
    
    public static void readMemoryData(String data){
     String data0 = Systemcrypt.HloveyRC4(data, MyKey);
     logData.add(data0);
    }
    
    public static void readMemoryCryptData(String data){
     logData.add(data);
    }
    
    public static void readMemoryArrayData(String[] data){
     int len = data.length;
     for(int i = 0;i<len;i++){
     logData.add(data[i]);
     }
    }    
    public static void readMemoryArrayCryptData(String[] data){
     int len = data.length;
     for(int i = 0;i<len;i++){
           String data0 = Systemcrypt.HloveyRC4(data[i], MyKey);
     logData.add(data0);
     }
    }
}  

    求高手点拨:
    我的这个项目,本身没有上面的报错的,运行了很久,也调试了不短的时间了...
    为什么会有:
    在我将我的本地储存用户数据的文件由ANSI编码格式转为utf8格式不久,就出现了这个问题...?
    经过长时间的调试,我将图2中的代码,又改成了下面的状态:
    
    (我将原来的“Long.parselong();方法”写成了“Long.valueOf();”方法,还是不成...)
    之后,我又将原本的数据类型“Long”,修改成了“Double”,并且在“MyArrayList类”中,我也进行了:“对应的修改”,还是不行..
    我的修改方式为:
    
package d_port_package;

import java.util.*;
public class MyArrayList{

    /**
 * 
 */
private static final long serialVersionUID = 1L;
ArrayList<Long> list = new ArrayList<Long>();
    
    public void add(String value){
        list.add(Long.parseLong(value));
    }

    public void calculate(int index, long value){
        if(index >= list.size()){
            throw new RuntimeException("下标越界 " + index);
        }
        list.set(index, list.get(index) + value);
    }
    
    public void put(Integer MyNum,long times){
     list.set(MyNum, times);
    }
    
    public long get(int index){
     try {
         return list.get(index);
     }catch(Exception ex) {
       return -1;
     }
    }
}

    并且,我在我的图2中的代码里,也进行了对应的修改.但是,结果又出现了“图1中的报错”,很令我纠结。。
    我的这块代码,一直运行的很好,我最近的一个操作是:
    进行了所有我的用户数据文件txt的转储原来的“ANSI编码格式”为“utf8编码格式”,的操作.
    现在,报错了..
    经过今天一个晚上的折腾,确实,我没有搞掂.
    希望能够得到高手的指导:
    错在什么地方?
    怎么修改?
    谢谢高手的点拨!! --------------------编程问答-------------------- 中间我将原本的Long.parselong();方法改成了:“Long.valueOf();”方法,并且我还将我的图2中的第195行的“ReadTxt.logData.get(i)”的代码修改成了:“Read.logData.get(i).trim();”,的语句..
还是,报原来的错...
很让我纠结.
希望得到高手的点拨:
错在哪里,怎么修改? --------------------编程问答-------------------- 目测只能是 那个数字的末尾是大写字母O --------------------编程问答-------------------- 从描述的问题来看应该是字符编码的问题.看下你在加密的过程中是否有问题 --------------------编程问答--------------------
Long l = Long.parseLong("1377229255190");
System.out.println(l);


没问题。
你最好将ReadText.logData.get(i)打印一下看下 --------------------编程问答-------------------- 将ReadText.logData.get(i)打印一下看看 --------------------编程问答--------------------
引用 3 楼 helloapps 的回复:
从描述的问题来看应该是字符编码的问题.看下你在加密的过程中是否有问题

在window下面用记事本编辑文件的时候,编码格式转为utf-8会在文本开头添加签名,这个签名在转long型的时候会报错,楼主可以了解下字节序标记方面的知识。把文件编码改成utf-8无bom试试 --------------------编程问答-------------------- 在操作ReadTxt.logData.get(i)之前,
你先输出一下 (ReadTxt.logData.get(i).matches("^[0-9]+$"))。
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,