Java 试图压缩else if语句
我目前有以下代码:Java 试图压缩else if语句,java,configuration-files,bukkit,Java,Configuration Files,Bukkit,我目前有以下代码: if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word1"))) { String message = event.getMessage().replaceAll(plugin.getConfig().getString("PBSwears.blocked.word1"), plugin.getConfig().getString("PBS
if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word1")))
{
String message = event.getMessage().replaceAll(plugin.getConfig().getString("PBSwears.blocked.word1"), plugin.getConfig().getString("PBSwears.replace.word1"));
event.setMessage(message);
}
else if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word2")))
{
String message = event.getMessage().replaceAll(plugin.getConfig().getString("PBSwears.blocked.word2"), plugin.getConfig().getString("PBSwears.replace.word2"));
event.setMessage(message);
}
它将持续大约6次…我试图把它浓缩成这样的东西:
String number = {find whitch number the message contains};
if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word" + number)))
{
String message = event.getMessage().replaceAll(plugin.getConfig().getString("PBSwears.blocked.word" + number), plugin.getConfig().getString("PBSwears.replace.word" + number));
event.setMessage(message);
}
但我正在努力寻找单词包含在哪个数字中(PBSwears.words.word1或PBSwears.words.word2)。我试过这样的方法:
char number='0';
if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word1")))
{
number='1';
}
else if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word2")))
{
number='2';
}
PBSwears:
blocked:
word1: *insert vulgar language*
word2: *insert vulgar language*
replace:
word1: *insert funny replacement*
word2: *insert funny replacement*
public Map<String, String> replacementWords = new HashMap<String, String>();
public String getWordReplacement(String word)
{
if (replacementWords.containsKey(word) {
return replacementWords.get(word);
}
return word;
}
但是,还有大量的else-if语句。
另外,我正在从一个配置文件中读取如下所示的值:
char number='0';
if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word1")))
{
number='1';
}
else if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word2")))
{
number='2';
}
PBSwears:
blocked:
word1: *insert vulgar language*
word2: *insert vulgar language*
replace:
word1: *insert funny replacement*
word2: *insert funny replacement*
public Map<String, String> replacementWords = new HashMap<String, String>();
public String getWordReplacement(String word)
{
if (replacementWords.containsKey(word) {
return replacementWords.get(word);
}
return word;
}
任何洞察都会非常有用。以下内容中唯一的一点是必须定义
MAX\u COUNT
。如果您知道要检查6次,那么将其定义为6,依此类推
public int getCorrectNumber() {
for(int i = 1; i <= MAX_COUNT; i ++) {
if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word" + i))) {
return i;
}
}
return -1;
}
你为什么不迭代呢
String[] badWords = {"word1", "word2", ...};
for (int i=0; i<badWords.length; i++){
if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words." + badWords[i]))){
String message = event.getMessage().replaceAll(plugin.getConfig().getString("PBSwears.blocked." + badWords[i]), plugin.getConfig().getString("PBSwears.replace." + badWords[i]));
event.setMessage(message);
}
}
String[]badWords={“word1”、“word2”、…};
对于(int i=0;i,我建议加载一个映射,其中包含由阻塞字键入的替换字。然后,您可以使用如下方法:
char number='0';
if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word1")))
{
number='1';
}
else if(event.getMessage().contains(plugin.getConfig().getString("PBSwears.words.word2")))
{
number='2';
}
PBSwears:
blocked:
word1: *insert vulgar language*
word2: *insert vulgar language*
replace:
word1: *insert funny replacement*
word2: *insert funny replacement*
public Map<String, String> replacementWords = new HashMap<String, String>();
public String getWordReplacement(String word)
{
if (replacementWords.containsKey(word) {
return replacementWords.get(word);
}
return word;
}
publicmap replacementWords=newhashmap();
公共字符串getWordReplacement(字符串字)
{
if(替换词.containsKey(词){
返回replacementWords.get(word);
}
返回词;
}
您必须预先填充地图,如下所示:
public void populateReplacementWordMap() {
int numberOfWords = 6;
for (int i = 1; i <= numberOfWords; i++) {
String blockedWord = plugin.getConfig().getString("PBSwears.blocked.word" + i);
String replacementWord = plugin.getConfig().getString("PBSwears.replace.word" + i);
replacementWords.put(blockedWord, replacementWord);
}
}
public void populateReplacementWordMap(){
int numberOfWords=6;
对于(int i=1;i听起来,这其中的大部分可以重构为一个helper方法,其变化通过方法参数表示。除非MAX_COUNT=1@Salauyou哎哟,那是个打字错误。刚刚修好。谢谢。这个工作做得很好。真不敢相信我想不出像这样的东西。顺便说一句,看看如何使用 HashMap
s,如下所述,在进一步的重构中。当然,它会让您更改API,但在性能方面要好得多。