Minecraft(我的世界)中文论坛

标题: 字符串的颜色怎么处理?问题如下

作者: 诺凡克罗诺    时间: 2018-11-6 14:07
标题: 字符串的颜色怎么处理?问题如下
§c生命值: +§66 怎么获得里面的数字6,然后替换它?
如果直接replace的话,是不是会把§6的6也替换了。。。
ChatColor.stripColor(String) 可以去除颜色,但是,如果去除颜色替换6
以后也没有办法返回颜色?
谢谢各位大佬了!

作者: gooding300    时间: 2018-11-6 15:23
[PCD] 跟着海螺学正则
http://www.mcbbs.net/forum.php?mod=viewthread&tid=827651
作者: 耗子    时间: 2018-11-6 18:21
  1. String message;
  2. message = message.replaceAll("§6", "§7");
复制代码


如果觉得我的答案有帮助或我很可爱的话,请给我钱或给我最高的评分。您的支持将让下一个人的问题得到解答。
作者: 海螺螺    时间: 2018-11-6 22:43
比如说你可以这样

p = java.util.regex.Pattern.compile("(:<=生命值\\:\\s\\+§[0-9a-fA-F])\\d+")
m = p.matcher("你的lore")
int ans = 0
while(m.find())
  ans = Integer.parseInt(m.group())

然后ans就是你要的那个值
如果要替换这个6的话,m这个Matcher实例也有replace方法,怎么用网上一搜一大堆

如果你觉得正则表达式很有用那么你可以看看沙发回复给的那个帖子,顺便评个分
作者: Muzi_xy    时间: 2018-11-7 11:23
可以用字符串拆分,然后重新拼接就行了
作者: 破产    时间: 2018-11-12 13:18
ChatColor里还有一个方法是ChatColor.getLastColors(String string)可以获得字符串最后面的颜色。
如你的要求写起来就是:
  1. String lore = "§c生命值: +§66";
  2. String lastColor = ChatColor.getLastColors(lore);
  3. int number = Integer.parseInt(ChatColor.stripColor(lore).split("\\+")[1]);
复制代码

这种小功能还不到使用正则的地步。
多翻一下API文档,有很多有用的东西 : )
作者: 海螺螺    时间: 2018-11-12 13:25
ZergZenith 发表于 2018-11-12 13:18
ChatColor里还有一个方法是ChatColor.getLastColors(String string)可以获得字符串最后面的颜色。
如你的要 ...

stripColor 源码,其中 (?i) 是忽略大小写
  1. private static final Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "[0-9A-FK-OR]");
  2. public static String stripColor(final String input) {
  3.         if (input == null) {
  4.             return null;
  5.         }

  6.         return STRIP_COLOR_PATTERN.matcher(input).replaceAll("");
  7.     }
复制代码


了解了解背后的原理也好

以及你的split用的仍然是个正则,总的来说性能大概会差些