🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# **KQCodeUtils** 因为原本框架中已经存在一个`CQCodeUtil`,因此为了避免混淆,也遵循一定的命名规则,我将当前的CQ码工具类命名为了`KQCodeUtils`。此类同样为`单例`对象,可通过常量`INSTANCE`或静态方法`getInstance()`获取实例。 在列举它的方法之前,这里先展示一些实例代码以供参考。以下示例使用`java`语言进行展示。 ## **注意** `KQCodeUtils`的内容会随着版本的更新逐步增加或变更。如果出现实际代码与文档不符的情况,以实际代码与注释为准。 ## **部分示例** - **创建CQ码字符串** ```java // 获取utils实例 final KQCodeUtils utils = KQCodeUtils.getInstance(); // toCq就是字符串 // 可以直接用 key=value的格式 final String atString1 = utils.toCq("at", "qq=123", "name=jack"); // 第二个boolean类型的参数代表是否要对 = 后面的值进行转义。 final String atString2 = utils.toCq("at", false, "qq=123", "name=jack"); // 可以使用map的格式 final HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("qq", 123456789); paramMap.put("name", "jack"); final String atString2 = utils.toCq("at", paramMap); // 可以使用Pair。Pair是kotlin中的 "qq" to 123456789 // 这里只是借java做个展示,一般kotlin里才这么用 final String atString3 = utils.toCq("at", new Pair<>("qq", 123456789), new Pair<>("name", "jack")); // 可以啥也没有 final String atString4= utils.toCq("at"); System.out.println(atString1); System.out.println(atString2); System.out.println(atString3); System.out.println(atString4); ``` >[success] 输出结果为: ``` [CQ:at,qq=123,name=jack] [CQ:at,qq=123456789,name=jack] [CQ:at,qq=123456789,name=jack] [CQ:at] ``` - **获取KQCode实例** ```java // 获取utils实例 final KQCodeUtils utils = KQCodeUtils.getInstance(); // toKq就是KQCode // 可以直接用 key=value的格式 final KQCode atKq1 = utils.toKq("at", "qq=123", "name=jack"); // 可以使用map的格式 final HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("qq", 123456789); paramMap.put("name", "jack"); final KQCode atKq2 = utils.toKq("at", paramMap); // 可以用Pair。一般kotlin使用此方法,例如 "qq" to 123456789 // @since v1.5.1-1.15 final KQCode atKq3 = utils.toKq("at", new Pair<>("qq", 123456789)); // 可以啥也没有 // @since v1.5.1-1.15 final KQCode atKq4 = utils.toKq("at"); System.out.println(atKq1); System.out.println(atKq2); System.out.println(atKq3); System.out.println(atKq4); ``` >[success] 输出结果为: ``` [CQ:at,qq=123,name=jack] [CQ:at,qq=123456789,name=jack] [CQ:at,qq=123456789] [CQ:at] ``` - **文本中获取CQ码** ```java // 一段文字与cq码的混编字符串 String cqCodeText = "你好![CQ:at,qq=123456], [CQ:at,qq=666666], 这段话很长的。[CQ:image,file=http://forte.love:15520/img/r]"; // utils实例 final KQCodeUtils utils = KQCodeUtils.getInstance(); // getCq, 就是获取字符串中的CQ码字符串 // 无参数,代表获取第一个出现的CQ码 final String getCq1 = utils.getCq(cqCodeText); // 获取索引为1的CQ码,即第二个CQ码 final String getCq2 = utils.getCq(cqCodeText, 1); // 获取索引为0的image类型的CQ码 final String getCq3 = utils.getCq(cqCodeText, "image", 0); // getCqIter, 就是获取多个CQ码字符串的迭代器。此处不做输出展示了。 utils.getCqIter(cqCodeText); // getCqs, 获取多个CQ码,可指定类型。 final String[] getCq4 = utils.getCqs(cqCodeText, "at"); /* 如果想要将提取出来的CQ码作为KQCode实例获取,使用getKq相关的方法即可。不再做示例。 */ System.out.println(getCq1); System.out.println(getCq2); System.out.println(getCq3); System.out.println(Arrays.toString(getCq4)); ``` >[success] 输出结果为: ``` [CQ:at,qq=123456] [CQ:at,qq=666666] [CQ:image,file=http://forte.love:15520/img/r] [[CQ:at,qq=123456], [CQ:at,qq=666666]] ``` - **获取文本中CQ码的参数** ```java // 一段文字与cq码的混编字符串 String cqCodeText = "你好![CQ:at,qq=123456], [CQ:at,qq=666666], 这段话很长的。[CQ:image,file=http://forte.love:15520/img/r]"; // utils实例 final KQCodeUtils utils = KQCodeUtils.getInstance(); // getParam,就是从文本中提取出来CQ码中的参数。 // 这个方法只能提取字符串,或者你可以直接从字符串中获取KQCode,并使用KQCode.get(...)方法。 // 相对于获取KQCode实例来获取参数,此方法直接操作字符串,更高效。 // 获取第一个CQ码的"qq"参数 final String getParam1 = utils.getParam(cqCodeText, "qq"); // 获取第一个at类型的CQ码的"qq"参数 final String getParam2 = utils.getParam(cqCodeText, "qq", "at"); // 获取索引为1的at类型的CQ码的"qq"参数 final String getParam3 = utils.getParam(cqCodeText, "qq", "at", 1); // 获取索引为2的CQ码的"file"参数 final String getParam4 = utils.getParam(cqCodeText, "file", 2); System.out.println(getParam1); System.out.println(getParam2); System.out.println(getParam3); System.out.println(getParam4); ``` >[success] 输出结果为: ``` 123456 123456 666666 http://forte.love:15520/img/r ``` - **移除文本中的CQ码** ```java // 一段文字与cq码的混编字符串 String cqCodeText = "你好![CQ:at,qq=123456] 哈哈 [CQ:at,qq=666666] 这段话很长的。[CQ:image,file=http://forte.love:15520/img/r]"; // utils实例 final KQCodeUtils utils = KQCodeUtils.getInstance(); // remove, 就是移除文本中的CQ码 // 移除所有的CQ码 final String remove1 = utils.remove(cqCodeText); // 移除所有的CQ码,并决定是否对文本执行trim final String remove2 = utils.remove(cqCodeText, true); // 移除所有的CQ码,决定是否trim,决定如果字符为纯空白字符是否忽略 final String remove3 = utils.remove(cqCodeText, true, true); // 移除所有的CQ码,决定是否trim,决定如果字符为纯空白字符是否忽略,并提供一个移除后剩余字符串的拼接字符 final String remove4 = utils.remove(cqCodeText, true, true, ","); // 移除指定类型的CQ码 final String remove5 = utils.removeByType("at", cqCodeText); // removeByType也同样拥有remove方法的那些参数,不再列举 System.out.println(remove1); System.out.println(remove2); System.out.println(remove3); System.out.println(remove4); System.out.println(remove5); ``` >[success] 输出结果为: ``` 你好!哈哈这段话很长的。 你好!哈哈这段话很长的。 你好!哈哈这段话很长的。 你好!,哈哈,这段话很长的。 你好!哈哈这段话很长的。[CQ:image,file=http://forte.love:15520/img/r] ``` - **切割文本与CQ码** ```java // 测试的CQ码 + 文本 String text = "[CQ:image,file=TOVNRSADSKM,url=http://image] 你好![CQ:at,qq=123456789]"; // 得到utils KQCodeUtils utils = KQCodeUtils.getInstance(); // 切割后, 非CQ码以外的内容不会做任何处理(例如不会trim()) List<String> splitList = utils.split(text); for (String s : splitList) { System.out.println(s); } /* 输出,注意 ' 你好!'前面是有空格的 [CQ:image,file=TOVNRSADSKM,url=http://image] 你好! [CQ:at,qq=123456789] */ // 切割, 并对每一条切割结果做处理,此处对每条结果进行去空格 List<String> splitList2 = utils.split(text, t -> t.trim()); for (String s : splitList2) { System.out.println(s); } /* 输出, 此处便没有空格了 [CQ:image,file=TOVNRSADSKM,url=http://image] 你好! [CQ:at,qq=123456789] */ ``` <br>