如何在字符串中检测IRC color codes?
这是我尝试过的:
int length = message.length();
ArrayList<Object> buffer = new ArrayList<Object>();
for (int i = 0; i < length; i++) {
char ch = message.charAt(i);
if (Character.isDefined(ch) && !Character.isLetter(ch)) {
Methods.log("val " + (int) ch);//Attempt logging the irc color value
} else {
buffer.add(ch);
}
}
然而这失败了。我正在为我的11年级编程课程编写一个IRC客户端,我认为颜色将是一个很酷的功能。
答案 0 :(得分:1)
IRC颜色为"specified" by mIRC - 它很复杂,并非所有客户都以相同的方式解释规范 - 但您正在寻找^C
“控制字符”({{1} })后跟数字,描述要使用的特定前景色和背景色。
在文本流中找到它们之后,您需要弄清楚如何更改文本小部件和上的文本颜色,记得在下一个文本之前将文本设置恢复正常消息输出。
答案 1 :(得分:0)
固定
int length = message.length();
LinkedList<Object> buffer = new LinkedList<Object>();
for (int i = 0; i < length; i++) {
char ch = message.charAt(i);
if ((byte) ch == 3) {
String color = "";
i++;
while (i < length) {//loop
char d = message.charAt(i);
if ((d >= '0') && (d <= '9')) {
if (color.length() == 2) {
i--;
break;//break b4 stackoverflow!!!
}
color += d;
i++;
} else {
i--;
break;//break b4 stackoverflow!!!
}
}
for (IRCModifier m : IRCModifier.values()) {
if (m.getCode().equalsIgnoreCase(color)
|| m.getCode().replace("0", "")
.equalsIgnoreCase(color)) {
buffer.add(m.getEffect());
break;
}
}
} else {
buffer.add(ch);
}
}