需要帮助将字符串写入文本文件中的多行

时间:2014-09-11 01:35:11

标签: java string text while-loop bufferedwriter

我有一个字符串toFile[]数组,我试图写入文本文件。在测试时,我被提醒如果刺痛到达窗口的边界,记事本不会将字符串包裹到下一行。作为一个完美主义者,我想将字符串拆分为长度为250个字符的子字符串,并将每个字符串写入文件,在每个子字符串后分成一个新行。

在测试时,我遇到的问题似乎无法解决,我的程序将在循环中运行一次然后因错误而失败。

输出和错误的示例:

toFile[2].length = 2432

temp.length = 250
split = 250
iLength = 2182

temp.length = 0
split = 500
iLength = 1932

java.lang.StringIndexOutOfBoundsException: String index out of range: -250

我的代码:

System.out.println("toFile[2].length = "+Integer.toString(toFile[2].length()));
System.out.println("");
if(toFile[2].length()>250){
    int iLength=toFile[2].length(), split = 0;
    while(iLength>250){
        String temp = toFile[2];
        temp = temp.substring(split, 250);
        System.out.println("temp.length = "+Integer.toString(temp.length()));
        bw.write(temp);bw.newLine();
        split=split+250;
        System.out.println("split = "+Integer.toString(split));
        iLength=iLength-250;
        System.out.println("iLength = "+Integer.toString(iLength));
        System.out.println("");
    }
    bw.write(toFile[2].substring(split));
}else{bw.write(toFile[2]);bw.newLine();}
bw.newLine();

我也试过这个while循环,它贯穿整个字符串但仍然只将字符串写入一行:

int iLength=toFile[2].length(), start = 0;
String temp = toFile[2];
while(iLength>250){
    bw.write(temp,start,250);

    start=start+250;
    System.out.println("start = "+Integer.toString(start));

    iLength=iLength-250;
    System.out.println("iLength = "+Integer.toString(iLength));
    System.out.println("");
}

2 个答案:

答案 0 :(得分:1)

只需纠正代码中的一件事,我希望其余的代码能正常工作,并且不会发出当前错误。进行以下更正。 在下面的语句中,您将修复结束索引的值,即250。

temp = temp.substring(split, 250);

当你第一次运行 的代码并且在temp中存储长度为250的字符串时这很好用,因为它temp = temp.substring(0, 250);执行split=0

第二次 split become 250,方法执行为temp = temp.substring(250, 250);,temp.length为0

但是,下次开始索引超出结束指数,即temp = temp.substring(500, 250);,这会在你的情况下抛出错误。

所以每次你拿一个子串时增加结束索引,或者你可以做.. temp = temp.substring(split, split + 250);

对于Java上其他有趣和解决问题的帖子,您可以访问http://www.codingeek.com/

答案 1 :(得分:0)

首先,你需要迭代包含所有字符串的数组toFile[]并在另一个函数中逐个处理它们的写作。

   public static void main (String[] args) throws java.lang.Exception
   {
      String[] toFile = new String[]{ ... };
      BufferedWriter bw = new BufferedWriter(...);

      for (String line : toFile) {   
         write(line, bw);
      }

   }

下一步是解决如何编写每个String。一种方法是编写250个字符的块。您唯一需要检查的是最后一部分可能少于250,以避免StringIndexOutOfBoundsException

   private static void write(String line, BufferedWriter bw) throws IOException {
      int length = line.length();

      if (length > SPLIT) {         
         int offset = 0;
         while (offset < length) {
            int remaining = length - offset;            
            bw.write(line, offset, remaining < SPLIT ? remaining : SPLIT);
            bw.newLine();            
            offset += SPLIT;
         }         
      } else {         
         bw.write(line);         
         bw.newLine();
      }

   }

这就是全部。但是如果字符串包含文本,那么拆分250个字符的块可能不是最好的选择,因为你可以切断单词。

完整示例代码:http://ideone.com/jQKe7Y