如果有时编码看起来像“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
首先,在内部,Java字符串总是UTF-16。
其次,你的代码没有任何意义!
要达到您想要的目的(“只从输入字符串中获取前五个字符!”),应该如下所示:
public String truncate( String input )
{
var retValue = (input != null) && (input.length() > 5)
? input.substring( 0, 5 )
: input;
return retValue;
}
当您想要使用代码点之类的东西时,不应该使用string
对象。 代码点正在调用int
或char
数组。
当输入数据的编码不同于UTF-16时,当将其放入string
实例时,将(必须)转换为UTF-16。 这可能是自动发生的(隐式地,在引擎盖下),或者您为此编写了一些代码。 这种转换可能是错误的,因为输入编码被错误地假定了。
但那将是另一壶鱼…