【问题标题】:Placing an array into a file column column将数组放入文件列列
【发布时间】:2017-02-08 19:35:58
【问题描述】:

我目前有一个 .txt 文件,其中一行如下所示:

xxxxxxxxxxxxxxxxxxxxx

我想把那一行放到一个二维数组中,这样我的文件就可以像这样出来了:

xxxxxxx
xxxxxxx
xxxxxxx

这是我的java 课程:

import java.util.*;
import java.io.*;

public class EncryptDecrypt {

    public static void encrypt() throws IOException {
        BufferedReader in = new BufferedReader(new FileReader("TextFile.txt"));
        String line = in.readLine();

        String[][] e = new String[5][3];

        // fill array
        for(int i = 0; i < e.length; i++) {
            for(int j = 0; j < e.length; j++) {
                e[i][j] = line;
            }
        }

        // print array
        for(int i = 0; i < e.length; i++) {
            for(int j = 0; j < e.length; j++) {
                System.out.println(e[i][j]);
                break;
            }
        }
    }

    public static void main(String[] args) throws IOException {
        encrypt();
    }
}

当我运行我的 java 类时,我得到的只是这不是我想要的:

xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx

【问题讨论】:

  • 您只是想重新格式化文件还是要将文件解析成内部结构?

标签: java arrays file multidimensional-array


【解决方案1】:

您必须使用 2D arraychar1D arrayString

'String' class 已在内部实现为 array of 'Char'

只需使用String 中的1D array,例如:

String[] e = new String[3];
    // fill array
    for(int i = 0; i < e.length; i++) {
            e[i] = line;
        }

    // print array
    for(int i = 0; i < e.length; i++) {
            System.out.println(e[i]);

    }

2D 版本如下所示(不推荐)

    String line = in.readLine();

 Char[][] e = new Char[3][5];

 for(int i = 0; i < e.length; i++) {
            for(int j = 0; j < e.length; j++) {
                e[i][j] = line.charAt(j);//to access element at jth index of string
            }
        }

        // print array
        for(int i = 0; i < e.length; i++) {
            for(int j = 0; j < e.length; j++) {
                System.out.print(e[i][j]);
            }
            System.out.println()
        }

无论如何打印你不要存储在数组中,只需这样做:

int noOfRows = 3;
for(int i=0;i<noOfRows;i++){
 System.out.println(line)
}

【讨论】:

  • 您认为在这种情况下哪个更好?
  • @yabva89 1D 更简单
  • 哦,太好了。出于好奇,能否请您给我看一下 2D 版本?我是 Java 新手,我想尽可能多地练习。
  • 我尝试将我的String 变量切换为char,但它不起作用,因为readLine() 不支持char
【解决方案2】:

你可以像这样遍历字符串:

String line = "xxxxxxxxxxxxxxxxxxxxx";

int colums = 7;

for (int i = 0; i < line.length(); i++) {
    System.out.print(line.charAt(i));
    if ((i + 1) % colums == 0) {
        System.out.println();
    }
}

当使用 Guava 的 Splitter 时,可以使用更具声明性的版本:

for (String token : Splitter.fixedLength(coluns).split(line)) {
    System.out.println(token);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多