Java ANSI颜色转义序列字符出现在String.length()中;
当使用ANSI转义序列为字符串着色,然后获取所讨论字符串的.length()时,它不会给出字符串可见部分的长度,而是包含转义序列的一部分Java ANSI颜色转义序列字符出现在String.length()中;,java,string,escaping,ansi,color-codes,Java,String,Escaping,Ansi,Color Codes,当使用ANSI转义序列为字符串着色,然后获取所讨论字符串的.length()时,它不会给出字符串可见部分的长度,而是包含转义序列的一部分 import java.util.*; public class ColorTest { public static void main(String[] args){ String RED = "\u001B[31m"; String test = "Test";
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(" ");
}
}
输出:
由于许多不同的颜色在转义序列中具有不同数量的数字(红色为31,亮红色背景为101),因此从字符串.length()数字中完全减去一个设置的数字是不可行的。我正在寻找一个通用的解决方案,它适用于所有颜色及其组合,其中只显示显示的字符串长度。这不是一个非常理想的方法,但如果regex性能不是一个很大的问题,它应该可以工作
public static int getStringLengthwhithoutANSI(字符串str){
返回str.replaceAll(“(\\x9B|\\x1B\\\[)[0-?]*[-\\/]*[@-~]”,即“).length();
}
这不是一种非常理想的方法,但如果正则表达式性能不是一个很大的问题,它应该可以工作
public static int getStringLengthwhithoutANSI(字符串str){
返回str.replaceAll(“(\\x9B|\\x1B\\\[)[0-?]*[-\\/]*[@-~]”,即“).length();
}
我几个月前就不再需要解决这个问题了,但无论如何,谢谢你对这个老问题的回答!我的朋友,你致力于帮助那些需要帮助的人。是的,我自己也在寻找解决这个问题的方法。遇到了你的问题,没有其他的解决方法,所以我自己设计了一个。无论如何,我都会发布给未来有这个问题的人同样的问题。我几个月前就不再需要这个问题的解决方案了,但无论如何,谢谢你对这个老问题的回答!你,我的朋友,致力于帮助那些需要帮助的人。是的,我自己也在寻找这个问题的解决方案。遇到了你的问题,没有其他解决方案,所以我自己设计了一个。不管怎样,为那些有我也有同样的问题。