从java中的文件填充二维字符数组

时间:2017-12-01 10:53:49

标签: java arrays multidimensional-array char

我是java的初学者,我正在尝试从输入文件填充二维字符数组。为此,我构造了一个方法,它接受一个2d字符数组作为参数变量,然后读取文件并将其存储为字符数组。到目前为止,我已经完成了除填充数组之外的所有事情,因为当我运行代码时,程序会抛出NoSuchElement异常。如果有人能帮助我,我会非常感激。

public static char [][] MakeWordArray (char [][] givenArray)
    {
    try
       {
        File wordFile= new File ("words.txt");
        Scanner in= new Scanner (wordFile);
        int rows =0;
        int col=0;
        while (in.hasNextLine())
        {
            rows = rows + 1;
            col = col + 1;
            in.next();       
        }
        char [][] words = new char [rows][col];
        File wordFile2= new File ("words.txt");
        Scanner in2= new Scanner(wordFile2);
        for ( int i = 0; i < rows; i++)
        {
          for (int j = 0; j < col; j++)
          {
              String wordly = in2.nextLine();
              words [i][j] = wordly.charAt(i);
          }
        }
        return words;
       }
    catch (FileNotFoundException e)
        {
         System.out.println("File Does Not Exist");
        }
    return null;
    }

3 个答案:

答案 0 :(得分:0)

尝试使用do while循环而不是while

do
{
rows=rows+1;
col=lol+1;
in.next();
}
while(in.hasNext());

答案 1 :(得分:0)

我认为你的计数方法存在一些问题。

如果你想计算你的.txt有多少行:

int counter = 0;

         while (in.hasNextLine())
         {
            counter++;
            in.nextLine();
         }

如果您想计算您的.txt有多少char

int counterWithoutSpace = 0, counterWithSpace = 0;

         while (in.hasNextLine())
         {
            String line = in.nextLine();

            Scanner inLine = new Scanner(line);
            while (inLine.hasNext())
            {
               String nextWord = inLine.next();
               counterWithoutSpace += nextWord.length();
               counterWithSpace += nextWord.length() + 1;
            }
            counterWithSpace--;
         }

如果您想计算每行有多少个字符,我建议ArrayList。因为数组的大小是动态的。
请注意,您也可以使用上面的字符计数器逻辑List
请参阅以下内容:

List<Integer> arr = new ArrayList<Integer>();

         while (in.hasNextLine())
         {
            arr.add(in.nextLine().length());
         }

如果您真的需要静态数组,可以使用:

Integer[] intArr = arr.toArray(new Integer[0]);

您可以按如下方式转换其整个功能,以获取.txt的每个Character的列表:

List<Character> arr = new ArrayList<Character>();

         while (in.hasNextLine())
         {
            String line = in.nextLine();

            for (char c : line.toCharArray())
            {
               arr.add(c);
            }
         }

答案 2 :(得分:0)

这里有很多问题。

1)为什么在你甚至不使用时都提供了char [] []参数?

2)当您需要做的只是从文件中读取并将其转换为2d数组时,为什么要使用两个文件?

3)方法名称应遵循驼峰套管惯例。

从我对你的问题的理解,这是我试过的代码。

注意 - 因为需求是Array而不是动态数据类型,如List ArrayList等,输入char数组的数据可能会丢失

说这是有效的。

  public class StackOverflow{
    public static char [][] makeWordArray ()
    {
        try{
            File f  = new File("C:\\docs\\mytextfile.txt");
            Scanner scan = new Scanner(f);
            int row = 0, col = 0;
            String readData = "";
            while(scan.hasNextLine()){
                readData += scan.nextLine(); 
                row++;  
            }
            double range = (readData.length()/row); 
            col = (int)Math.ceil(range);
            char[][] arr = new char[row][col];
            int count = 0;
            for (int i = 0; i < row; i++){
                for(int j = 0; j < col; j++){
                    arr[i][j] = readData.charAt(count++); 
                    System.out.println("Pos: ["+ i +"][" + j + "]" + arr[i][j]);
                }
            }
            return arr;
        }
        catch(FileNotFoundException fe){
            System.err.println(fe.getMessage());
            return null;
        }
    }
    public static void main(String[] arg){
        char[][] myarr = StackOverflow.makeWordArray();
        //print your array
    }
 }