字符串在for循环中被覆盖

时间:2014-08-07 07:41:15

标签: java

我正在迭代for循环,从文件中读取内容,将结果存储在字符串中。如何防止字符串在for循环中被覆盖?

我这样做 -

for(File file:files) {
    String fileContent = readFileContents(file.getAbsolutePath()); // this is getting overwritten
}

3 个答案:

答案 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 );
}