Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中高效地解析和写入文件_Java_String - Fatal编程技术网

在Java中高效地解析和写入文件

在Java中高效地解析和写入文件,java,string,Java,String,我有一个没有新行字符的文件。我希望每160个字符有一个新行字符 为此,我读取文件,然后执行以下操作: String newLine = ""; int lineSize = 160; char[] line = new char[lineSize]; while (rEntrada.read(line) > 0) { newLine = new String(line); String parsedLine = parseLine(newLine, date); fw.w

我有一个没有新行字符的文件。我希望每160个字符有一个新行字符

为此,我读取文件,然后执行以下操作:

String newLine = "";
int lineSize = 160;
char[] line = new char[lineSize];
while (rEntrada.read(line) > 0) {
   newLine = new String(line);
   String parsedLine = parseLine(newLine, date);
   fw.write(parsedLine);
}
其中parseLine负责对该行进行一些额外的解析。我的主要问题是,在while循环中执行“新字符串”是否效率低下,或者不建议这样做,或者在这段代码中您是否看到了可以做得更好的内容。我真的在努力提高编码水平


谢谢

看看StringBuffer,看看它在这种情况下是否不可用


如果您不是多线程的,可能也会感兴趣。

这对我来说很好,我能看到的唯一低效之处是
parseLine
是否可以写得更好,可能是通过
line
而不是
newLine
。这取决于parseLine的实际功能。

试试这个

  • 首先读一行

    FileReader r = new FileReader(new File("<file-name>"));
    // A buffered reader is fast
    BufferedReader = reader = new BufferedReader(r);
    
  • 现在迭代字符串并在每160个位置插入一个
    \n

    StringBuilder sb = new StringBuilder();
    int counter = 0;
    

  • 现在您可以将这一行写入文件


在Java中,在循环内部或外部使用字符串并不重要。字符串是不可变的,因此您唯一要保存的是对字符串的引用,这是可以忽略的。不过,您可以看看使用StringBuilder的示例。这并不重要。保存引用不会为您节省大量的周期或内存。难道您不能从i=160开始,然后去掉
i==0
检查吗?如果行的长度更大,它可能会引发异常。但我编辑了一个新的更好的答案。我仍然不喜欢这样,为什么在追加
\n
之前,在知道要追加160个字符时,每次追加一个字符?同样如此。它更容易理解,而且我们需要
\n
之间的每个字符
StringBuilder sb = new StringBuilder();
int counter = 0;
for (int i=0; i<line.length(); i++){
    sb.append(line.charAt(i));
    counter++;
    if (counter==160){
        sb.append("\n");
        counter = 0;
    }
}
line = sb.toString();