Java - 在单词结尾处循环结束

时间:2013-10-19 17:07:34

标签: java for-loop

我正在尝试制作一个Minecraft Bukkit插件,它涉及制作主题标签等。我有它,所以当你#hashtag-goes-here时,它会突出显示它。唯一的问题是,你必须在它之后有另一个词(有一个空格)才能工作。到目前为止,这是我的代码:

            try{
                for(int i = index; i < message.length(); i++){
                    String str = Character.toString(message.charAt(i));
                    String sbString = sb.toString().trim();
                    System.out.println(sbString);
                    if(str.equals(" ")){
                        str.replace(str, str + ChatColor.RESET);
                        String hName = sb.toString().replaceFirst("#", "").trim();
                        String newMessage = message.replaceAll("#", ChatColor.AQUA + "#").replace(str, ChatColor.RESET + str);
                        event.setMessage(newMessage);
                        logHashtag(event.getPlayer(), event.getMessage(), hName);
                        break;
                    }else{
                        sb.append(str);
                    }
                }
            }catch(Exception e){
                throw new HashtagException("Failed to change hashtag colors in message!");
            }

编辑(已经回答过去,我知道了;这是因为阅读此内容的人知道我在问什么)我的问题是它可以在所有情况下都可以使用可以找到hashtag。感谢halfbit帮助我:)

2 个答案:

答案 0 :(得分:1)

如果要在文本中查找字符串并突出显示它们,那么正则表达式可能非常有用。您可以使用类似于以下内容的代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HashTagColorizer {

    public static void main(String[] args) {
        String AQUA = "<AQUA>", RESET = "<RESET>";
        String message = "Aaa #hashtag-goes-here bbb #another-hashtag ccc";
        Pattern pattern = Pattern.compile("#([A-Za-z0-9-]+)");
        Matcher matcher = pattern.matcher(message);
        StringBuilder sb = new StringBuilder(message.length());
        int position = 0;
        while (matcher.find(position)) {
            sb.append(message.substring(position, matcher.start()));
            sb.append(AQUA);
            System.out.println("event for " + matcher.group(1));
            sb.append(matcher.group().substring(1));
            sb.append(RESET);
            position = matcher.end();
        }
        sb.append(message.substring(position));
        System.out.println(sb);
        // Aaa <AQUA>hashtag-goes-here<RESET> bbb <AQUA>another-hashtag<RESET> ccc
    }

}

答案 1 :(得分:0)

而不是在if sb上执行您的逻辑,而是在str上的其他位置(或sb后添加str) ,但您将在sb已经处理过的部分重复大量处理。

欢迎你。

BTW:

str.replace(str, str + ChatColor.RESET);

不执行任何操作,因为String个实例不可变