2014-10-27 4 views
0

У меня возникли проблемы с этим кодом. Мне нужно написать код, в котором он говорит SwapField отображать столбцы из текстового файла и свопы столбец 2 будет столбец 1.swapping column из текстового файла в Java

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; 
} 
+0

Итак, вы хотите поменять местами 2 столбца, а затем записать данные обратно в тот же файл? – Grice

+0

У меня уже есть данные, записанные в текстовом файле. Я хотел бы сначала отобразить 3 столбца и затем поменять порядок столбцов. Да, я хотел бы написать обратно в файл. –

+0

Вот как выглядит текстовый файл. Я хотел бы рассказать Томаса Джефферона вместо Джефферсона Тома. Jefferson Thomas Adams Samuel –

ответ

1

ОК, так что вы хотите способ взять в String input ограниченную delim, и обменные поля fieldA и fieldB?

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, вы можете использовать StringUtils.join от Apache Commons Lang.

Я также предполагаю, что ваш delim находится в правильном формате для метода .split(), что означает, что это строковый литерал, который не содержит экранов и других символов регулярных выражений. Это кажется довольно правдоподобным предположением, если это разделитель в текстовом файле (обычно это запятая, пробел или вкладка). Он также предполагает, что разделитель не встречается в другом месте в input, в кавычках или что-то в этом роде. Вы ничего не упомянули о котировках; вам нужно добавить что-то, чтобы уточнить, хотите ли вы иметь возможность обрабатывать такие вещи.

+0

Благодарим вас за ответ. Я ценю это. Этот код работает нормально, но как насчет того, хочу ли я использовать строку BufferOutput = "", и возвращать BufferOutput для отображения тех же данных без свопинга. –

+0

@ nabil Извините, я не понимаю, что вы имеете в виду. –

Смежные вопросы