如何正确使用StringBuilder而不是过长的方法

时间:2012-06-11 10:45:12

标签: java

我想知道如何正确使用StringBuilder因为我当前的方法(http://pastebin.com/VHjM0KeQ)太长了,我确信我可以做一个循环或字符串构建器我是只是不确定如何,谢谢。

3 个答案:

答案 0 :(得分:2)

除了0参数和超过20个参数的情况之外的所有内容几乎相同,您可以轻松地使用StringBuilder和循环来将单词添加到文本中。

像这样:

if (args.length == 0) {
    player.sendMessage(ChatColor.DARK_RED + "Usage: /pm <Target> <Message>");
} else if (args.length > 20) {
    player.sendMessage(ChatColor.DARK_RED + "Error: Maximum of 20 words.");
} else {
    StringBuilder sb = new StringBuilder();
    sb.append(ChatColor.DARK_AQUA).append("[PM] ");
    sb.append(player.getName() + " > " + targetPlayer.getName());
    sb.append(ChatColor.WHITE);
    for (final String word : args) {
        sb.append(word).append(' ');
    }
    sb.setLength(sb.length - 1);
    targetPlayer.sendMessage(sb.toString());
}

我使用了一个数组循环,因为它在这里运行得很好。而不是

for (final String word : args) {
    sb.append(word).append(' ');
}

你也可以写

for (int i = 0; i < args.length; i++) {
    sb.append(args[i]).append(' ');
}

你可能会更好地理解第二种解决方案。

答案 1 :(得分:0)

使用StringBuilders会稍微改善您的代码,这是真的:

targetPlayer.sendMessage(ChatColor.DARK_AQUA + "[PM] " 
+ player.getName() + " > " + targetPlayer.getName() 
+ ChatColor.WHITE + " " + args[0])

应更改为:

targetPlayer.sendMessage(
    new StringBuilder()
    .append(ChatColor.DARK_AQUA).append("[PM] ")
    .append(player.getName()).append(" > ")
    .append(targetPlayer.getName()).append(ChatColor.WHITE)
    .append(' ').append(args[0]).build());

注意:编译器会在内部为您执行此操作,因此不会有太多性能提升。但是,您的代码将更容易调试,因为编译的代码将与源代码一致。否则,当您进行调试时,您将继续跳转到源代码中没有的StringBuilder.append()次呼叫。

但是我看到你的代码的主要问题是你应该将许多if()子句改为switch语句:

switch(args.length){
 case 0: dosomething(); break;
 case 1: doSomethingElse();break;
 default: doSomethingEntirelyDifferent();break;
}

答案 2 :(得分:0)

尝试这样的事情

if(args.length == 0) {
    player.sendMessage(ChatColor.DARK_RED + "Usage: /pm <Target> <Message>");
} else if(args.length > 20 && player.getServer().getPlayer(args[0]) != null){
    player.sendMessage(ChatColor.DARK_RED + "Error: Maximum of 20 words.");
} else {
    StringBuilder argsConcat= new StringBuilder();
    for(int i;i<args.length;i++) {
        argsConcat.append(" "+args[i]);
    }## Heading ##
    targetPlayer.sendMessage(ChatColor.DARK_AQUA + "[PM] " + player.getName() + " > " +        targetPlayer.getName() + ChatColor.WHITE + argsConcat.toString());
}