Java 将多个字符串转换为一个字符串

Java 将多个字符串转换为一个字符串,java,Java,我试图将多个字符串转换成一个简单的NPC对话。基本上,我想做的是列出一个球员拥有200米经验的所有技能,并将其输出到NPC对话中 旧的 有了这些代码,我就可以工作了,但是由于有25种不同的技能,需要添加很多代码。我将如何创建一种方法,使所有技能都被引用为一个技能?以下是所有技能名称: public static final String[] SKILL_NAME = { "Attack", "Defence", "Strength", "Constitution", "Ranged", "Pra

我试图将多个字符串转换成一个简单的NPC对话。基本上,我想做的是列出一个球员拥有200米经验的所有技能,并将其输出到NPC对话中

旧的

有了这些代码,我就可以工作了,但是由于有25种不同的技能,需要添加很多代码。我将如何创建一种方法,使所有技能都被引用为一个技能?以下是所有技能名称:

public static final String[] SKILL_NAME = { "Attack", "Defence", "Strength", "Constitution", "Ranged", "Prayer",
        "Magic", "Cooking", "Woodcutting", "Fletching", "Fishing", "Firemaking", "Crafting", "Smithing", "Mining",
        "Herblore", "Agility", "Thieving", "Slayer", "Farming", "Runecrafting", "Hunter", "Construction",
        "Summoning", "Dungeoneering" };
新的和有效的(用于攻击/力量/防御):

public static final int[]SKILL_TYPE={Skills.ATTACK,Skills.STRENGTH,Skills.DEFENCE};
公共字符串maxedSkills(){
StringBuffer sb=新的StringBuffer();
对于(inti=0;i0)sb.append(“,”);
某人追加(技能、技能、姓名等);
}
}
如果(sb.length()>0)sb.append(“.”);
使某人返回字符串();
}
使用StringBuffer(线程安全)或StringBuilder并执行类似操作

....
public static final Skills[] SKILL_TYPE = {Skills.Attack, Skills.Defence, ...};

public String getBigString() { 
    StringBuffer sb = new StringBuffer();
    int nSkills = 0, lSkill = 0;
    for( int i = 0; i < SKILL_TYPE.length; i++ )
      { 
      if( player.getSkills().getXp(SKILL_TYPE[i]) == K_SOMELEVEL ) {
        if(nSkills > 0) sb.append(", ");
        lSkill = sb.length(); // track position of last skill in string
        nSkills += 1;
        sb.append(SKILL_NAME[i]);
        }
      }
    if( nSkills > 0 ) 
      { 
      if( nSkills > 1 ) sb.insert( lSkill, "and ");
      sb.append(".");
      }
    return sb.toString();
}
。。。。
公共静态最终技能[]技能类型={Skills.Attack,Skills.Defence,…};
公共字符串getBigString(){
StringBuffer sb=新的StringBuffer();
int nskill=0,lSkill=0;
for(int i=0;i0)sb.追加(“,”);
lSkill=sb.length();//跟踪字符串中最后一项技能的位置
nSkills+=1;
某人附加(技能名称[i]);
}
}
如果(nSkills>0)
{ 
如果(nskill>1)某人插入(lSkill,“和”);
某人加上(“.”);
}
使某人返回字符串();
}

最简单的方法是使用参数化方法,将
技能
类型作为输入。下面是它的样子:

public String skillMax(Skills skill) {
    if (player.getSkills().getXp(skill) == 200000000)
    return skill.getName() + ", ";
    else
    return "";
}
接下来要做的是在
Skills
enum中为技能提供
name
。像这样的方法应该会奏效:

public enum Skills {
    DEFENSE("Defense"), ...;
    private String name;
    Skills(String name) { this.name = name; }
    String getName() { return this.name; }
}

什么是“NPC”和“NPC对话”?这是非玩家角色及其对用户的对话近年来API中最令人愉快、宣传不足、最受欢迎的新增内容之一-太棒了,我“借用”了它,并在我们不允许使用Java 8I时将其放入我们的库中。我将其转换为我的代码,以使其正常工作,但现在我在返回“+skillName.getName()+”时出错;部分原因是它想使其静止。。但是您不能将字符串getName()设为静态,而仍然返回名称…谢谢您的帮助。但是Micromuncher的代码似乎和我想要的很好地配合。我以后肯定会在其他一些代码中使用您的示例,它教会了我一些有关枚举和强制转换它的方法。非常有帮助。除了显示SkillID编号而不是技能名称的例外情况外,这是有效的。。例如,它将显示我可以使用0,2而不是攻击强度检查您使用的是技能名称而不是类型。如果它是一个字符串,它应该附加那个字符串。啊,我确实将它附加到int,而不是skills.SKILL_NAME[I]中,就像我应该的那样。这把它修好了,现在它工作得很好。感谢您帮助我缩短并修复代码MicroPuncher!只要再问一个问题,如果可能的话,我会问的,但如果有,那就太好了。如果列出了2个以上的技能,有没有办法在最后一个技能前面加上一个“and”字符串?这是我所说的图片。当然,您看到了逗号和句号的逻辑。对2个或更多技能执行类似操作。因此,我将修改答案以显示ut,
public String skillMax(Skills skill) {
    if (player.getSkills().getXp(skill) == 200000000)
    return skill.getName() + ", ";
    else
    return "";
}
public enum Skills {
    DEFENSE("Defense"), ...;
    private String name;
    Skills(String name) { this.name = name; }
    String getName() { return this.name; }
}