检测字符串中的IRC颜色

时间:2012-06-05 22:37:47

标签: java unicode utf-8 irc

如何在字符串中检测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客户端,我认为颜色将是一个很酷的功能。

2 个答案:

答案 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);
            }
        }