【问题标题】:ANSI color escape sequence chars appearing inside String.length();ANSI 颜色转义序列字符出现在 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() 数字中总减去一组数字是不可行的.我正在寻找一个适用于所有颜色及其组合的通用解决方案,它只显示显示字符串的长度。

【问题讨论】:

    标签: java string escaping ansi color-codes


    【解决方案1】:

    这不是一个非常理想的方法,但如果正则表达式性能不是一个很大的问题,它应该可以工作。

    public static int getStringLengthWithoutANSI(String str) {
        return str.replaceAll("(\\x9B|\\x1B\\[)[0-?]*[ -\\/]*[@-~]", "").length();
    }
    

    【讨论】:

    • 几个月前我不再需要解决这个问题了,但无论如何感谢您对这么一个老问题的回复!你我的朋友,致力于帮助有需要的人。
    • 是的,我自己也在寻找解决这个问题的方法。遇到你的问题,没有其他解决方案,所以自己设计了一个。无论如何发布给未来有同样问题的人。
    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2014-09-25
    • 2011-09-27
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多