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

Java 如何正确使用StringBuilder而不是过长的方法,java,Java,我想知道如何正确使用StringBuilder,因为我当前的方法()太长了,我确定我可以做循环或字符串生成器,但我不确定如何,谢谢。除了0个参数和超过20个参数的情况外,其他情况基本相同,您可以轻松使用StringBuilder和循环将单词添加到文本中 像这样: if (args.length == 0) { player.sendMessage(ChatColor.DARK_RED + "Usage: /pm <Target> <Message>"); } el

我想知道如何正确使用
StringBuilder
,因为我当前的方法()太长了,我确定我可以做循环或字符串生成器,但我不确定如何,谢谢。

除了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 (int i = 0; i < args.length; i++) {
    sb.append(args[i]).append(' ');
}
for(int i=0;i

您可能会对第二种解决方案有更好的理解。

使用StringBuilder后,您的代码会略有改进,这是事实:

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;
}

试试这样的

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());
}
if(args.length==0){
player.sendMessage(ChatColor.DARK_RED+“用法:/pm”);
}else if(args.length>20&&player.getServer().getPlayer(args[0])!=null){
player.sendMessage(ChatColor.DARK_RED+“错误:最多20个单词”);
}否则{
StringBuilder argsConcat=新StringBuilder();

对于(inti;i+1,这大概就是我要做的。一个小小的增强就是将最大值设为常数。是的,当然。我只是不想引入更多绝对必要的更改,以避免混淆。
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());
}