簡體   English   中英

從Java中的文本文件交換列

[英]swapping column from a text file in Java

我在使用此代碼時遇到了一些問題。 我需要在代碼中寫上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;
}

好的,因此您希望該方法接受由delim分隔的String input ,並交換字段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()方法使用delim作為分隔符(解釋為正則表達式;有關此的假設,請參見下文.split()input分解為一個數組。 然后交換兩個相關的(零索引)字段,並使用.join()重建String

請注意,最后一行( .join() )需要.join() 。如果您沒有Java 8,則可以使用Apache Commons Lang中的StringUtils.join

我在這里還假設您的delim采用.split()方法的正確格式,也就是說,它是一個字符串文字,不包含轉義符和其他正則表達式字符。 如果它是文本文件中的定界符(通常是逗號,空格或制表符),那么這似乎是一個足夠合理的假設。 它進一步假定定界符不會出現在input其他地方,引號之內。 您沒有提到引號。 您需要添加一些內容以澄清是否希望能夠處理此類問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM