有人可以解释我为什么会这样:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5
File file = new File("file.txt");
BufferedWriter writer = null;
Date date;
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
try { writer = new BufferedWriter(new FileWriter(file));
writer.write(" ",0,1);
writer.write("FICH", 1, 4);
writer.write("1234", 5, 4);
writer.close();
System.err.println(writer.toString());
}
catch (IOException ex) {
Logger.getLogger(FicheroTdALogic.class.getName()).log(Level.SEVERE, null, ex);
}
finally {
try {writer.close();} catch (Exception ex) {}
}
答案 0 :(得分:0)
BufferedWriter.write()
采用字符串,偏移量和长度。偏移告诉第一个字符写,长度告诉计数(多少)。
字符索引从0开始。第一个字符的索引为0
,第二个字符的索引为1
等。
很明显,在"FICH"
字符串中有4个字符,有效索引为0..3
。 offset = 1和length = 4导致最后一个char为5,超出界限(非法字符索引)。
类似地,"1234"
具有有效的索引0..3
,即使偏移量超出界限(5),也是最后一个字符(将在9处)。
如果您只是想写一个完整的String
,请不要传递任何其他内容:
writer.write("Whole string will be written.");
如果只需要它的一部分,请正确指定偏移量和长度:
writer.write("Hello", 1, 3); // Writes "ell"