我在Java中使用StringBuffer将字符串连接在一起,如下所示:
StringBuffer str = new StringBuffer();
str.append("string value");
我想知道是否有方法(虽然我没有通过快速浏览文档找到任何内容)或其他一些方法来添加“填充”。
让我解释一下;每当我向字符串追加一些内容时,我想在最后添加一个空格,如下所示:
String foo = "string value";
str.append(foo + " ");
我有几个要追加的电话..每次,我想添加一个空格。有没有办法设置对象,以便在每次追加后自动添加空格?
编辑 -
String input
StringBuffer query = new StringBuffer();
Scanner scanner = new Scanner(System.in);
scanner.UseDelimiter("\n");
do {
System.out.println("sql> ");
input = scanner.next();
if (!empty(input)) query.append(input);
if (query.toString().trim().endsWith(";")) {
//run query
}
}
while (!input.equalsIgnoreCase("exit");
我会使用StringBuilder,但grom建议,但这就是代码现在的样子
答案 0 :(得分:9)
我认为使用辅助方法(未经测试的代码)可以更轻松地处理这个问题:
public String myMethod() {
StringBuilder sb = new StringBuilder();
addToBuffer(sb, "Hello").addToBuffer("there,");
addToBuffer(sb, "it").addToBuffer(sb, "works");
}
private StringBuilder addToBuffer(StringBuilder sb, String what) {
return sb.append(what).append(' '); // char is even faster here! ;)
}
甚至使用具有流畅界面的Builder模式(也是未经测试的代码):
public String myMethod() {
SBBuilder builder = new SBBuilder()
.add("Hello").add("there")
.add("it", "works", "just", "fine!");
for (int i = 0; i < 10; i++) {
builder.add("adding").add(String.valueOf(i));
}
System.out.println(builder.build());
}
public static class SBBuilder {
private StringBuilder sb = new StringBuilder();
public SBBuilder add(String... parts) {
for (String p : parts) {
sb.append(p).append(' '); // char is even faster here! ;)
}
return this;
}
public String build() {
return sb.toString();
}
}
这是关于这个主题的article。
希望它有所帮助! :)
答案 1 :(得分:6)
您应该使用StringBuilder。
在可能的情况下,建议首先使用此类优先于StringBuffer,因为在大多数实现中它会更快。
答案 2 :(得分:4)
StringBuffer是最终的。你无法从中衍生出来。 最好的解决方案是为自己添加填充。为它编写一个方法并使用PADDING-Constant,以便您可以轻松地更改它,或者更好地将它放在参数中。
答案 3 :(得分:3)
你能否创建一个包裹StringBuffer
并添加appendWithTrailingSpace()
方法的新类?
CustomStringBuffer str = new CustomStringBuffer();
str.appendWithTrailingSpace("string value");
(虽然你可能想把你的方法称为更短的东西。)
答案 4 :(得分:2)
根据你自己的例子,只需自己添加空间,这很容易。
答案 5 :(得分:1)
另一种可能性是StringBuilder对象在调用append时返回自己,这意味着你可以这样做:
str.append("string value").append(" ");
不是那么光滑,但它可能比+“”方法更容易解决。
另一种可能性是构建一个包装类,如PaddedStringBuilder,它提供相同的方法,但应用你想要的填充,因为你不能继承。