我有一个字符串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("");
}
答案 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