在我的游戏文本渲染系统中,我实现了对彩色单词的支持。 所以,如果我想用红色的第一个单词和白色的其他单词来渲染一个句子,我可以这样做:
"|3Hello |1there Steven!"
当渲染字符串时,它会搜索|
字符,然后查看后面的数字,该数字对应于某种颜色(3 =红色,1 =白色),然后它会为其他颜色着色那种颜色的字符串。
我希望能够移除|
字符及其后的数字。
当它查看邮件并看到|3
时,我希望它将颜色设置为红色,然后删除|3
。如果我使用替换所有|
后跟一个数字的方法,那么当涉及|1
的部分时,它不会将颜色设置为白色,因为|1
不在信息中了。
我该怎么做?
答案 0 :(得分:2)
您可以使用以下正则表达式匹配|
后跟一个或多个数字,然后替换为空字符串:
[|]\d+
这是 a sample 。这是一些测试代码:
String test = "|3Hello |1there Steven!";
String replaced = test.replaceAll("[|]\\d+", "");
System.out.println(replaced);
答案 1 :(得分:2)
|
是一个特殊角色,所以你必须逃避它
这个怎么样? (假设'|'
之后只有一个号码)
str=str.substring(0,str.indexOf("|")+2).replaceAll("[|]\\d+", "")+str.substring(str.indexOf("|")+2);
答案 2 :(得分:0)
您可以将输入文本拆分为“|”并检查第一个字符,假设您不期望使用任何其他|在你的文字中。不知道你想如何显示颜色,但这是一个使用html的例子:
public static void main(String[] args) {
String[] TEXT_COLORS = {
"FF0000", // Red
"FF7F00", // Orange
"FFFF00", // Yellow
"00FF00" // Green
};
String input = "|3Hello |1there Steven!";
String[] coloredPhrases = StringUtils.split(input, "|");
StringBuilder output = new StringBuilder();
for (int i=0; i < coloredPhrases.length; i++) {
String phrase = coloredPhrases[i];
if (phrase.substring(0,1).matches("\\d")) {
int colorIndex = Integer.parseInt(phrase.substring(0,1));
output.append(String.format("<font color=#%s>%s</font>", TEXT_COLORS[colorIndex],phrase.substring(1)));
} else {
output.append(phrase);
}
}
System.out.print(output);
}