如何通过char将Java char中的文件读入整数数组?

时间:2016-08-31 02:00:29

标签: java

我的文件中填充了所有不带空格的数字。 我试图用Java逐个字符地读取这个文件到一个整数数组。 我尝试将该文件作为字符串读取,然后通过char将char逐步导入数组,但我认为该文件超出了字符串大小限制。

1 个答案:

答案 0 :(得分:1)

正如@Scary Wombat建议的那样,String的最大大小和数组的最大大小都是Integer.MAX_VALUE。我们可以参考String max sizeArray max sizeList max size。请注意,具体的最大大小应为Integer.MAX_VALUE - 1或-2或-5与此主题无关​​。出于保险目的,我们可以使用Integer.MAX_VALUE - 6.

我认为您的号码非常大,根据

,文件中的字符数量可能超过Integer.MAX_VALUE的最大值
  

我尝试将该文件作为String读取,然后逐步执行它   char成一个数组,但我认为该文件超出了字符串大小   限制。

为了处理最大值,我建议您创建另一个List来保存整数。它的核心概念就像dynamic array,但存在一些差异。对于dynamic array,您正在申请另一个内存空间并将当前元素复制到该空间中。您可以参考以下代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;

public class ReadFile {
    public static void main(String args[]){
        try{        
            File file = new File("number.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader reader = new BufferedReader(fileReader);
            ArrayList<ArrayList<Integer>> listContainer = new ArrayList<ArrayList<Integer>>();
            ArrayList<Integer> list = new ArrayList<Integer>();
            int item;
            while((item = reader.read()) != -1){
                /*
                 * I assume you want to get the integer value of the char but not its ascii value
                 */
                list.add(item - 48);
                /*
                 * Reach the maximum of ArrayList and we should create a new ArrayList instance to hold the integer
                 */
                if(list.size() == Integer.MAX_VALUE - 6){
                    listContainer.add(list);
                    list = new ArrayList<Integer>();
                }
            }
            reader.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}