0

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

4

3 回答 3

2

除了 0 个参数和超过 20 个参数的情况外,其他情况几乎相同,您可以轻松地使用 aStringBuilder和循环将单词添加到文本中。

像这样:

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(' ');
}

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

于 2012-06-11T10:55:48.067 回答
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;
}
于 2012-06-11T10:56:12.160 回答
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());
}
于 2012-06-11T11:04:02.777 回答