我正在尝试制作一个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帮助我:)
答案 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
个实例不可变