0

对于更有经验的程序员来说,这应该是一个相对快速的解决方案……我只是想输入一个文本文件,并在不以“>”或“+”开头的每一行前面放置一个“#”。问题是我遇到了一个异常, .charAt(0) 超出了字符串的范围。但是在控制台执行该行之前,应该从文本文件中读取字符串——我错过了什么?我是否需要插入一行内容以使前面声明的 lineFromFile String 不为空?我不知道该怎么办...

导入java.io.*;

公共类 FirstTry {

/**
 * @param args
 */
public static void main(String[] args) throws Exception{
    // Declare variables corresponding to names of i/o files
    String oldFilename = "";
    String newFilename = "";

    // Console input of i/o filenames
    BufferedReader cin;
    cin = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("What is the input text? Include path and .txt extension) ");
    oldFilename = cin.readLine();
    System.out.print(oldFilename);

    System.out.println("What is the output text? Include path and .txt extension) ");
    newFilename = cin.readLine();
    System.out.print(newFilename);

    cin.close();

    // Read text from old file,     
    BufferedReader fin;
    fin = new BufferedReader(new FileReader(oldFilename));

    while (fin.ready())
    {
      String lineFromFile;
      lineFromFile = fin.readLine();
      System.out.println(lineFromFile);

      if (lineFromFile.charAt(0) != '>' || lineFromFile.charAt(0) != '+')
      {

        PrintWriter fout;
        fout = new PrintWriter(new FileWriter(newFilename));
        fout.println('#' + lineFromFile);
        fout.close();
      }
    } // while

    fin.close();


    System.out.print("Text processing complete.");

}//main

}//公开课

4

2 回答 2

0

正如@Patashu 提到的,行可能有 0 个字符。这将导致lineFromFile位置 0 没有字符,因为它是一个空字符串。我会将while循环的一部分更改为:

String lineFromFile;
lineFromFile = fin.readLine();
System.out.println(lineFromFile);

if (lineFromFile.length() == 0) continue;

if (lineFromFile.charAt(0) != '>' || lineFromFile.charAt(0) != '+') {...

我插入的那一行检查该行是否为空白。如果是,跳到循环的下一次迭代,从文件中读取下一行。

作为一个完整的旁注,您可能需要重新考虑PrintWriter为(可能)输入文件中的每一行创建和关闭一个。

于 2013-01-22T02:23:31.017 回答
0

如果文件的第一行有 0 个字符怎么办?

我认为java中的语法是lineFromFile.Length == 0。如果这是真的,你知道这一行是空的,并且想以不同的方式处理它(让它成为一个单一的#我想)

于 2013-01-22T02:10:18.453 回答