在Java中交换文本文件中的列

时间:2014-10-27 14:44:09

标签: java java-ee

我在使用此代码时遇到了一些问题。我需要编写一个代码,其中显示SwapField以显示文本文件中的列,并将第2列交换为第1列。

public static void main(String[] args) {
    int lineNum = 0;
    String delimiter = " ";

    if (args.length != 3) {
        System.out.println("USAGE:  java SwapColumn fileName column#  column#");
        System.exit(-1);
    }
    String dataFileName = args[0];
    String columnAText = args[1];
    String columnBText = args[2];
    int columnA = Integer.parseInt(columnAText);
    int columnB = Integer.parseInt(columnBText);

    File dataFile = new File(dataFileName);
    Scanner input;
    String outputText = null; 
    System.out.printf("dataFileName=%s, columnA=%d, columnB=%d\n",
            dataFileName, columnA, columnB);
    try {
        input = new Scanner(dataFile);
        while (input.hasNextLine()) {
            String inputText = input.nextLine();
            lineNum++;

            outputText = swapFields(inputText, columnA, columnB, delimiter);
            System.out.printf("%d: %s\n", lineNum, outputText);
        }
    } catch (FileNotFoundException FNF) {
        System.out.printf("file not found: %s\n", dataFileName);
    }
}

static String swapFields(String input, int fieldA, int fieldB, String delim) {
    String outputBuffer = "";
   //code needed here

    return outputBuffer;
}

1 个答案:

答案 0 :(得分:1)

好的,您希望该方法采用由String input分隔的delim,并交换字段fieldAfieldB

static String swapFields(String input, int fieldA, int fieldB, String delim) {
    String[] bits = input.split(delim);
    String temp = bits[fieldA];
    bits[fieldA] = bits[fieldB];
    bits[fieldB] = temp;
    return String.join(delim, bits);
}

在此代码中,.split()方法将input分解为数组,使用delim作为分隔符(解释为正则表达式;有关此的假设,请参阅下文) 。然后交换两个相关(零索引)字段,并使用String重建.join()

请注意,最后一行(.join())需要Java 8.如果您没有Java 8,那么您可以使用Apache Commons Lang中的StringUtils.join

我也在这里假设你的delim格式正确为.split()方法,也就是说它是一个不包含转义符和其他正则表达式字符的字符串文字。如果它是文本文件中的分隔符(通常是逗号,空格或制表符),这似乎是一个似乎合理的假设。它进一步假设分隔符不会出现在input中的其他位置,引号内或其他内容中。你没有提到有关报价的任何内容;如果你想要处理这些事情,你需要添加一些内容来澄清。