提问者:小点点

如何获得任意编码的5个字符的Java字符串?


如果有时编码看起来像“UTF-8”,“UTF-16”和“ASCII”,我怎么才能只得到字符串的5个字符呢?

注意:一些测试输入有emoji。

    public String truncate(String input) {
        if (input.codePointCount(0, input.length()) > 5)
        {
            return input.substring(0, input.offsetByCodePoints(0, 6));
        }

        return input;
    }

输入:Bärteppich

预期输出:Bärte也表示Bärte

实际输出:band·rt

输入:brühe

预期输出:br gahe也表示brühe

实际输出:br gah


共1个答案

匿名用户

首先,在内部,Java字符串总是UTF-16。

其次,你的代码没有任何意义!

要达到您想要的目的(“只从输入字符串中获取前五个字符!”),应该如下所示:

public String truncate( String input ) 
{
    var retValue = (input != null) && (input.length() > 5)
        ? input.substring( 0, 5 )
        : input;

        return retValue;
}

当您想要使用代码点之类的东西时,不应该使用string对象。 代码点正在调用intchar数组。

当输入数据的编码不同于UTF-16时,当将其放入string实例时,将(必须)转换为UTF-16。 这可能是自动发生的(隐式地,在引擎盖下),或者您为此编写了一些代码。 这种转换可能是错误的,因为输入编码被错误地假定了。

但那将是另一壶鱼…