Java方法撤消算法

时间:2013-10-08 21:15:25

标签: java

我要做的是读取一个文件并使用StringBuilder来反转文件内部的一个字符串单词的顺序。 我让它在while循环中工作但是当我将它添加到方法时它只打印出原始文件文本。

这是有效的代码;

// File being read....
while ((currentString = s.next()) != null) {
    a.insert(0, currentString);
    a.insert(0," ");
}

打印

line. this reads it hope I file. this read will program This

以下代码不起作用;

// File being read....
while ((currentString = s.next()) != null) {
    System.out.print(reverse(currentString));
} 

方法

public static StringBuilder reverse(String s){
    StringBuilder a = new StringBuilder();
    a.insert(0, s);
    a.insert(0," ");
}

打印

This program will read this file. I hope it reads this line.

我做错了什么?

2 个答案:

答案 0 :(得分:2)

每次致电StringBuilder a时,您都会创建新的reverse()。您需要保留对StringBuilder的引用,以便正确地将所有字符串附加到它。

// File being read....
StringBuilder a = new StringBuilder();

while ((currentString = s.next()) != null) {
    reverse(a, currentString);
}

// ...

public static void reverse(StringBuilder a, String currentString) {
    a.insert(0, s);
    a.insert(0," ");
}

答案 1 :(得分:2)

您正在创建一个新的StringBuilder并在您阅读每个单词时进行打印。 您需要构建字符串,然后在所有读数后打印。 如果你想在方法中反转但是读取方法之外的每个单词,那么你可以将当前的StringBuilder提供给你的反向方法,如

StringBuilder total = new StringBuilder();
while ((currentString = s.next()) != null) {
    reverse(total, currentString);
}
System.out.print(currentString);

public static void reverse(StringBuilder total, String s) {
    total.insert(0, s);
    total.insert(0, " ");
}