首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala中,如何获得字符串的ANSI显示长度?

在Scala中,如何获得字符串的ANSI显示长度?
EN

Stack Overflow用户
提问于 2022-09-02 18:20:35
回答 1查看 73关注 0票数 1

这是一个极简的例子:

代码语言:javascript
复制
  it("actual length") {

    import scala.io.AnsiColor
    val str = AnsiColor.RED + "c" + AnsiColor.RESET

    assert(str.length == 1)
  }

但在执行此测试时,它显示str的长度为10,而显示长度应为1(所有ANSI转义字符都应具有0长度)。

怎么改正呢?

EN

回答 1

Stack Overflow用户

发布于 2022-09-02 20:33:30

length方法的doc说这实际上计算了Unicode码单元的数量

在Java文档中,Unicode代码点用于U+0000和U+10FFFF之间的字符值,Unicode代码单元用于16位字符值,这些值是UTF-16编码的代码单元。

代码语言:javascript
复制
   /**
     * Returns the length of this string.
     * The length is equal to the number of Unicode code units in the string.
     *
     * Returns the length of the sequence of characters represented by this object.
     */
    public int length() {
        return value.length >> coder();
    }

没有内置的解决方案来计算您想要的内容,但是您可以使用regex简单地删除它们。AnsiColor转义码似乎有一个精确的模式:\u001b + [ + 1-2 digits + m

代码语言:javascript
复制
  val str: String = AnsiColor.RED + "c" + AnsiColor.RESET
  println(str.replaceAll("\\u001B\\[\\d{1,2}m", "").length) // 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73586626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档