我想在给定的java文件中交换两个单词

时间:2015-01-06 14:59:07

标签: java string file

我想在java文件中交换最后两个单词。 该文件名为text_d.txt,它包含:

   Student learns programming java.

这是代码(如下)。输出相同,我不明白为什么它不会改变。

import java.nio.*;
import java.io.*;
import java.lang.*;

public class Test3 {
     public static void main(String[] args) throws Exception {
         String s2="text_t.txt";
         File _newf = new File("text_d.txt");
         changeOrder(_newf);
     }

     public static void changeOrder(File f) throws Exception {
         FileInputStream _inp=new FileInputStream(f.getAbsolutePath());
         BufferedReader _rd=new BufferedReader(new InputStreamReader(_inp));
         String _p=_rd.readLine();

         while (_p != null) {
             String [] _b = _p.split(" ");
             for(int i = 0; i <= _b.length; i++) {
                 if(i == 2) {
                     String aux=_b[i];
                     _b[i]=_b[i+1];
                     _b[i+1]=aux;
                     break;
                 }
              }
              _p=_rd.readLine();
          }
     }
}

3 个答案:

答案 0 :(得分:3)

为了阅读,交换和写入文件,我建议你做这样的事情:

public class Test3 {
 public static void main(String[] args) throws Exception {
     String s2="text_t.txt";
     File _newf = new File("text_d.txt");
     changeOrder(_newf);
 }

 public static void changeOrder(File f) throws Exception {
     FileInputStream _inp = new FileInputStream(f.getAbsolutePath());
     BufferedReader _rd = new BufferedReader(new InputStreamReader(_inp));

     ArrayList<String[]> newFileContent = new ArrayList<String[]>();
     String _p=_rd.readLine();
     while (_p != null) {
         String [] _b = _p.split(" ");
         String temp = _b[_b.length - 2];
         _b[_b.length - 2] = _b[_b.length - 1];
         _b[_b.length - 1] = temp;
         newFileContent.add(_b);

          _p=_rd.readLine();
     }

     PrintWriter writer = new PrintWriter(f.getAbsolutePath(), "UTF-8");
     for (String[] line : newFileContent) {
         for (String word : line) {
             writer.print(word);
         }
         writer.println();
    }
    writer.close();
}

有两处小改动:

  • 首先,我更改了您在代码中使用的for循环,包含3行代码。
  • 其次,我曾经在while ArrayListString数组中添加了PrintWriter循环中更改的所有行,这些行可以保存更改以便将来保存在文件中。

毕竟,我使用了foreach类的实例,它可以在硬盘上写一个文件。在{{1}}循环中,我在输入文件中写了新文件的内容。

答案 1 :(得分:1)

您可以尝试这样的事情:

public static void changeOrder(File f) throws Exception {
    FileInputStream _inp = new FileInputStream(f.getAbsolutePath());
    BufferedReader _rd = new BufferedReader(new InputStreamReader(_inp));
    String _p = _rd.readLine();
    while (_p != null) {
        String [] _b=_p.split(" ");
        String temp  = _b[_b.length - 1];
        _b[_b.length - 1] = _b[_b.length - 2];
        _b[_b.length - 2] = temp;
        _p = _rd.readLine();
    }

}

但是如果你想要更新文件,你需要将结果写入文件......你应该使用一些东西写入文件,如PrintWriter

答案 2 :(得分:0)

这应该做你想要的技巧:

public static String changeOrder(File fileName) throws IOException {
    Scanner file = new Scanner(fileName);
    String line = file.nextLine();
    line = line.replace('.', ' ');
    String[] items = line.split(" ");
    StringBuilder sb = new StringBuilder();
    sb.append(items[0] + " ");
    sb.append(items[1] + " ");
    sb.append(items[3] + " ");
    sb.append(items[2] + ".");
    return sb.toString();
}

预期结果:学生学习java编程。