我正在迭代for循环,从文件中读取内容,将结果存储在字符串中。如何防止字符串在for循环中被覆盖?
我这样做 -
for(File file:files) {
String fileContent = readFileContents(file.getAbsolutePath()); // this is getting overwritten
}
答案 0 :(得分:2)
您正在为for循环的每次迭代重新定义String
。在循环外移动String的声明。
String fileContent = "";
for(File file:files) {
fileContent += readFileContents(file.getAbsolutePath());
}
同样StringBuilder是字符串操作的更好选择。
所以这是一个有效的方法:
StringBuilder fileContent = new StringBuilder();
for(File file:files) {
fileContent.append(readFileContents(file.getAbsolutePath()));
}
答案 1 :(得分:2)
您正在循环中定义字符串变量,因此,在每次迭代时,都会创建新实例,并且将覆盖旧实例。
String fileContent = "";
for(File file:files) {
fileContent = fileContent + " : " + readFileContents(file.getAbsolutePath()); // this is getting overwritten
}
或使用StringBuilder
将新数据附加到字符串。
OR
StringBuilder str = new StringBuilder();
for(File file:files) {
str.append(readFileContents(file.getAbsolutePath()));
}
System.out.println(str);
如果您想将每个数据存储为单个/单独,则可以使用:
List<String> strList = new ArrayList<>();
for(File file:files) {
strList.add(readFileContents(file.getAbsolutePath()));
}
答案 2 :(得分:1)
我会使用stringbuilder。字符串连接以这种方式更有效。 要引用您的问题,因为您的声明在for循环中,所以每次迭代时都会覆盖字符串的值。在循环外移动声明不会完全解决这个问题,因为它仍然会被新值覆盖。通过使用concatination,您可以实现您想要的结果。
StringBuilder sb = new StringBuilder();
for(File file:files) {
sb.append(readFileContents(file.getAbsolutePath()));
}
System.out.println("sb = " + sb.toString());
如果您只想单独拥有所有文件路径,也可以将字符串保存在ArrayList中。
String filepath = "";
List<String> paths = new ArrayList<>();
for(File file: files) {
paths.add(file.getAbsolutePath());
}
for(String s : paths){
System.out.println("filepath: " + s );
}