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

I want to interchange two words in a given java file

我想交换 java 文件中的最后 2 个单词。 该文件名为 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();
          }
     }
}

您可以尝试这样的操作:

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.

这样的东西来写入文件

这应该可以达到您想要的效果:

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 编程。

对于读取、交换和写入文件,我建议你这样做:

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();
}

有两个小改动:

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

毕竟我用的是PrintWriterclass的一个实例,可以在硬盘上写入文件。在 foreach 循环中,我在输入文件中写入了新文件的内容。