场景
- php项目转java,php使用的是substr方法,java使用String.substring替换,发现截取的结果是不同的。那么java应该怎么实现呢?
分析和解决
- substr函数截取的是什么? php官方文档中没有说明,但实际上截取的是字节
1.1 如果字符串编码是utf8 那么中文占3个字节, 比如:
$sourceStr = "学会感恩HelloWorld";
echo "原串:" . $sourceStr . PHP_EOL;
echo "2字节 :" . substr($sourceStr, 0,2) . PHP_EOL;
echo "3字节 :" . substr($sourceStr, 0,3) . PHP_EOL;
echo "6字节 :" . substr($sourceStr, 0,6) . PHP_EOL;
1.2 如果字符串编码是gbk 那么中文占2个字节
2. java substring截取的是字符, 那么java怎么才能实现subStr呢?
2.1 思路: 字符串转成byte数组,从byte数组中截取需要的部分, 然后再转回字符串
private String substr(String sourceStr, int from, int to){
return new String(Arrays.copyOfRange(sourceStr.getBytes(StandardCharsets.UTF_8), from, to), StandardCharsets.UTF_8);
}