我想知道如何StringBuilder
正确使用,因为我当前的方法(http://pastebin.com/VHjM0KeQ)太长了,我确定我可以做一个循环或字符串生成器我只是不确定如何到,谢谢。
问问题
137 次
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 回答