Java:StringBuffer和串联
时间:2020-03-06 14:54:45 来源:igfitidea点击:
我在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");
我将按照grom的建议使用StringBuilder,但是现在代码就是这样
解决方案
按照我们自己的示例,只需自己添加空间,这很容易。
我们是否不能创建一个新的类来包装StringBuffer并添加一个appendWithTrailingSpace()方法?
CustomStringBuffer str = new CustomStringBuffer(); str.appendWithTrailingSpace("string value");
(尽管我们可能想将方法调用得更短一些。)
StringBuffer是最终的。我们不能从中得出。
最好的解决方案实际上是为自己添加填充。为此编写一个方法并使用PADDING-Constant,以便我们可以轻松地对其进行更改,或者最好将其放入参数中。
我们应该使用StringBuilder。
Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most implementations.
另一种可能性是,当我们调用append时,StringBuilder对象将返回自身,这意味着我们可以执行以下操作:
str.append("string value").append(" ");
虽然不那么精巧,但是它可能比+""方法更容易解决。
另一种可能性是构建一个包装器类,例如PaddedStringBuilder,该类提供相同的方法,但会应用所需的填充,因为我们无法继承。
我认为这可以通过使用辅助方法(未经测试的代码)更轻松地进行处理:
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(); } }
这是有关该主题的文章。
希望能帮助到你! :)