【问题标题】:I want to interchange two words in a given java file我想在给定的 java 文件中交换两个单词
【发布时间】:2015-01-06 14:59:06
【问题描述】:

我想交换 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();
          }
     }
}

【问题讨论】:

  • 你的预期输出是什么?
  • @atishshimpi 预期输出是学生学习 java 编程
  • 您想更改文件中的单词顺序吗?现在您只是更改了它们在“_b”数组中的顺序,您没有在任何地方保存对文件的更改。
  • 你不会在任何地方输出任何东西。您将这些行读入内存,然后操作内存。文件未更改。
  • @AliLotfi 是的,你是对的,要更改其内容,我必须再次在文件中写入数组

标签: java string file


【解决方案1】:

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

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 循环中更改的行添加到 ArrayListString 数组中,这些数组可以保存更改,以便将来保存在文件中。

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

【讨论】:

    【解决方案2】:

    你可以试试这样的:

    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 之类的东西写入文件。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-21
        • 1970-01-01
        • 2014-10-16
        • 1970-01-01
        • 1970-01-01
        • 2016-06-11
        • 2018-02-09
        • 1970-01-01
        相关资源
        最近更新 更多