Java 无法在GuidMemberJoin上使用getMember替换所有

Java 无法在GuidMemberJoin上使用getMember替换所有,java,discord-jda,Java,Discord Jda,出于某种原因,jda不允许我在guildjoinevent上使用replaceAll时使用event.getMember(),我真的不知道为什么会这样。您有两个问题 有一个打字错误 replaceAll的第一个参数被解释为,并且[]定义了一个字符类(在正则表达式中具有特殊含义) 如何解决 修正你的打字错误:“[member]]”⟹ “[成员]” 如果要使用replaceAll,则需要转义[]⟹ “\\[成员]” 作为一种替代方法,您可以使用replace方法,该方法不将正则表达式作为其第一个参数

出于某种原因,jda不允许我在guildjoinevent上使用replaceAll时使用event.getMember(),我真的不知道为什么会这样。

您有两个问题

  • 有一个打字错误
  • replaceAll
    的第一个参数被解释为,并且
    []
    定义了一个字符类(在正则表达式中具有特殊含义)
  • 如何解决

  • 修正你的打字错误:
    “[member]]”
    ⟹ <代码>“[成员]”
  • 如果要使用
    replaceAll
    ,则需要转义
    []
    ⟹ <代码>“\\[成员]”
  • 作为一种替代方法,您可以使用
    replace
    方法,该方法不将正则表达式作为其第一个参数,而是将传入的字符串作为文本(意思是原样的)。但是,您仍然需要修复键入错误,如
    消息[number]。替换(“[member]”,…)

    也许用一种简单的方式来看待它是最容易的

    import net.dv8tion.jda.core.EmbedBuilder;
    import net.dv8tion.jda.core.hooks.ListenerAdapter;
    
    import java.awt.*;
    import java.util.Random;
    
    public class GuildMemberJoinEvent extends ListenerAdapter {
    
        String[] messages = {
                "[member] joined. You must construct additional pylons.",
                "Never gonna give [member] up. Never let [member] down!",
                "Hey! Listen! [member] has joined!",
                "Ha! [member] has joined! You activated my trap card!",
                "We've been expecting you, [member].",
                "It's dangerous to go alone, take [member]!",
                "Swoooosh. [member] just landed.",
                "Brace yourselves. [member] just joined the server.",
                "A wild [member] appeared.",
                "Is it hot in here or is it just me? Oh [member] joined that explains it"
        };
        public void onGuildMemberJoin(GuildMemberJoinEvent event){
            Random rand = new Random();
            int number = rand.nextInt(messages.length);
    
            EmbedBuilder join = new EmbedBuilder();
            join.setColor(Color.red);
            join.setDescription(messages[number].replaceAll("[member]]", event.getMember().getAsMention()));
    
        }
    }
    
    
    然后将给您这个示例输出

    永远不会放弃[membeStanley42],永远不会让[membeStanley42]失望!
    永远不会放弃[会员]。永远不会让[会员]失望!
    永远不要放弃Stanley42,永远不要让Stanley42失望!
    永远不会放弃[会员]。永远不会让[会员]失望!
    永远不要放弃Stanley42,永远不要让Stanley42失望!
    
    尝试使用
    replace
    而不是
    replaceAll
    。我厌倦了使用replace,但它仍然不起作用。出于某种原因,jda不允许我使用event.getMember()当在guildjoinevent上使用replaceAll时——始终要尽可能具体——根据这一描述,我们不得不猜测,您的问题可能是使用了
    replaceAll
    ;但可能还有另一个问题(不容易看到)。因此,如果有错误消息,请将其包括在内;如果没有错误消息,请将您的预期和实际发生的情况(意外结果)包括在内。也请参阅。我真的不知道为什么会这样。-看一看。此外,别忘了接受答案(勾选答案旁边的复选标记)当它回答您的问题时。这样,您的问题就不会在搜索中显示为未回答。非常感谢!这有助于我更好地理解它,感谢简化的示例,它仍然不允许我使用event.getMember().getAsMention,但我认为它是“public void onbuildmemberjoin(GuildMemberJoinEvent)”的bcs由于某种原因,它不允许这种情况发生,因此将其更改为“public void onGuildMemberJoin(net.dv8tion.jda.core.events.guild.member.GuildMemberJoinEvent事件)”
    static String[] messages = {
            "[member] joined. You must construct additional pylons.",
            "Never gonna give [member] up. Never let [member] down!",
            "Hey! Listen! [member] has joined!",
            "Ha! [member] has joined! You activated my trap card!",
            "We've been expecting you, [member].",
            "It's dangerous to go alone, take [member]!",
            "Swoooosh. [member] just landed.",
            "Brace yourselves. [member] just joined the server.",
            "A wild [member] appeared.",
            "Is it hot in here or is it just me? Oh [member] joined that explains it"
    };
    
    public static void main(String[] args) {
        Random rand = new Random();
        int number = rand.nextInt(messages.length);
    
        String member = "Stanley42";
    
        String original = messages[number].replaceAll("[member]]", member);
        String originalWithEscaping = messages[number].replaceAll("\\[member]]", member);
        String fixedOriginal = messages[number].replaceAll("\\[member]", member);
    
        String useReplace = messages[number].replace("[member]]", member);
        String fixedUseReplace = messages[number].replace("[member]", member);
    
        System.out.println(original);
        System.out.println(originalWithEscaping);
        System.out.println(fixedOriginal);
        System.out.println(useReplace);
        System.out.println(fixedUseReplace);
    }