You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bukkit插件开发:玩家聊天单词字符移位与多单词拼接输出问题

问题解决与代码修正

首先明确你的核心需求:将输入的每个单词的最后一个字符移到开头,再将所有处理后的单词用空格拼接成单句输出。原代码存在逻辑缺失和拼接错误,以下是修正方案:

关键问题分析

  1. 未实现单个单词的字符转换逻辑
  2. 错误使用成员变量存储处理后的单词,异步事件下存在线程安全风险
  3. 拼接数组为字符串的方式完全错误
  4. 存在无意义的全局字符串操作(StringBuffer删最后一个字符)

修正后的完整代码

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import java.util.ArrayList;
import java.util.List;

public class ConnectionListener implements Listener {

    @EventHandler
    public void onMessageSent(AsyncPlayerChatEvent event) {
        Player player = event.getPlayer();
        String input = event.getMessage();
        event.setCancelled(true);

        // 按空格分割输入为单词数组
        String[] words = input.split(" ");
        List<String> transformedWords = new ArrayList<>();

        // 遍历处理每个单词
        for (String word : words) {
            transformedWords.add(transformWord(word));
        }

        // 将处理后的单词列表拼接为空格分隔的单句
        String output = String.join(" ", transformedWords);
        player.sendMessage(output);
    }

    // 单个单词的转换逻辑:把最后一个字符移到开头
    private String transformWord(String word) {
        // 单个字符直接返回,无需处理
        if (word.length() <= 1) {
            return word;
        }
        // 拼接最后一个字符 + 前面所有字符(除最后一个)
        return word.charAt(word.length() - 1) + word.substring(0, word.length() - 1);
    }
}

核心点说明

  1. 单词转换逻辑:通过transformWord方法单独处理每个单词,逻辑清晰且可复用。对于长度≤1的单词直接返回,避免索引越界。
  2. 数组拼接为单句:使用String.join(" ", transformedWords)可以快速将列表中的单词用空格拼接成完整字符串,这是Java 8及以上版本最简洁的方式。如果需要兼容更低版本,也可以用StringBuilder手动拼接:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < transformedWords.size(); i++) {
    if (i != 0) {
        sb.append(" ");
    }
    sb.append(transformedWords.get(i));
}
String output = sb.toString();
  1. 线程安全优化:将存储处理后单词的列表声明为方法局部变量,避免异步事件中多个线程同时访问成员变量导致的异常。

内容的提问来源于stack exchange,提问作者Julian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:20:29