文本文件I / O和正则表达式

时间:2018-03-29 02:42:38

标签: java

  • 所以我的目标是创建一个读取文件名的类 create作为第一个命令行参数。 (用。覆盖任何文件 同名)。

  • 然后我应该读取一个整数值作为第二个命令 行参数。

  • 程序应该生成尽可能多的随机数 在第二个命令行参数中指定的大小 在1到1000之间并将它们写入文件。

  • 完成程序的最后一步是你必须只写5 每行上的数字,然后开始一个新的行。 (最后一行可能 少于5个数字。)在一行上划分数字 与&字符。应该分隔一行的结尾 #character。不应明确指出其他分隔符 使用

这是我的代码:

import java.util.*;
import java.io.*;
public class RandomNumGen{
static final int SEED=152;
public static void fileStore( String file, int number )
{        
    if (file == null || number <=0){
        throw new IllegalArgumentException("Error");
    }

    String line = "%s&%s&%s&%s&%s#\n";
    BufferedWriter buffWriter = null;
    Random rand = new Random(SEED);

    try{
        buffWriter = new BufferedWriter(new FileWriter(file));

        int x = number / 5;
        int j = number - x * 5;
        for (int i=0; i<x; i++)
        {
            int number1 = rand.nextInt(1000-1+1)+1;
            int number2 = rand.nextInt(1000-1+1)+1;
            int number3 = rand.nextInt(1000-1+1)+1;
            int number4 = rand.nextInt(1000-1+1)+1;
            int number5 = rand.nextInt(1000-1+1)+1;
            String str = String.format(line,number1,number2,number3,number4,number5);

            buffWriter.write(str);
            System.out.println(str);

        }

        StringBuilder str = new StringBuilder();
        for (int i=0; i<j; i++)
        {
            str.append(rand.nextInt(1000-1+1)+1);
            str.append("&");

        }
        str.deleteCharAt(str.length()-1);
        str.append("#");
        String lineStr = str.toString();
        buffWriter.write(lineStr);

        System.out.print(lineStr);

        buffWriter.close();

    }catch(IOException e){
        e.printStackTrace();
    }
}

public static void main(String[]args){
    fileStore("output.txt",14);
}
}

我的程序似乎工作正常但是当我使用以5或0结尾的int时 我得到一个java.lang.StringIndexOutOfBoundsException:字符串索引 范围:-1。

这是我的输出:

286&112&602&201&763#

318&820&768&787&897#

707&54&927&40#

任何改进我的代码的提示都会很棒。

1 个答案:

答案 0 :(得分:0)

嗯,使用格式并不是一个坏主意,但我会说KISS:

    try{
        BufferedWriter buffWriter = new BufferedWriter(new FileWriter(file));
        StringBuilder str = new StringBuilder();
        for (int i=0; i<number; i++)
        {
            int n = rand.nextInt (1000) + 1;
            if (i % 5 == 4 || i == number-1)
                str.append (n + "#\n");
            else
                str.append (n + "&");
        }
        String lineStr = str.toString();
        buffWriter.write (lineStr);
        System.out.print (lineStr);
        buffWriter.close ();
    }

从0开始计算

(i % 5 == 4 || i == number-1)

对于每一行的最后一个元素和最后一个数字都是如此。