ANSI 颜色转义序列字符出现在 String.length();
Posted
技术标签:
【中文标题】ANSI 颜色转义序列字符出现在 String.length();【英文标题】:ANSI color escape sequence chars appearing inside String.length(); 【发布时间】:2020-09-29 16:05:09 【问题描述】:当使用 ANSI 转义序列对字符串进行着色,然后获取相关字符串的 .length() 时,它不会给出字符串可见部分的长度,而是包含转义序列的一部分。
import java.util.*;
public class ColorTest
public static void main(String[] args)
String RED = "\u001B[31m";
String test = "Test";
// Prints length with color
System.out.println(test);
System.out.println("Length: "+test.length());
// Prints length with color
test = RED+test;
System.out.println(test);
System.out.println("Length: "+test.length());
// Prints every char found in the String
char[] testCharList = test.toCharArray();
for(char x : testCharList)
System.out.print(x+" ");
System.out.println(" ");
输出: output
由于许多不同的颜色在其转义序列中具有不同数量的数字,(红色为 31,亮红色背景为 101)从 String.length() 数字中总减去一组数字是不可行的.我正在寻找一个适用于所有颜色及其组合的通用解决方案,它只显示显示字符串的长度。
【问题讨论】:
【参考方案1】:这不是一个非常理想的方法,但如果正则表达式性能不是一个很大的问题,它应该可以工作。
public static int getStringLengthWithoutANSI(String str)
return str.replaceAll("(\\x9B|\\x1B\\[)[0-?]*[ -\\/]*[@-~]", "").length();
【讨论】:
几个月前我不再需要解决这个问题了,但无论如何感谢您对这么一个老问题的回复!你我的朋友,致力于帮助有需要的人。 是的,我自己也在寻找解决这个问题的方法。遇到你的问题,没有其他解决方案,所以自己设计了一个。无论如何发布给未来有同样问题的人。以上是关于ANSI 颜色转义序列字符出现在 String.length();的主要内容,如果未能解决你的问题,请参考以下文章
将 ANSI 转义(终端格式/颜色代码)转换为 HTML 的库 [关闭]