按byte截取日语字符串

来源:互联网 发布:淘宝双十一晚会2017 编辑:程序博客网 时间:2024/05/29 02:22

按byte截取日语字符串

业务要求是:把一个字符串按9byte分割,9byte后加一个回车换行,因为字符串中包含日文字,就要考虑同一个音标不被分割到两行,困扰了一会,写了如下代码,有类似业务的可以参考。

代码块

import java.util.Arrays;public class StringAddEnterByByte {    private static final String[] ARR = { "゙", "゚" };    private static final String[] ARR2 = { "゙", "゚", "ゃ", "ゅ", "ょ", "ャ", "ュ", "ョ", "ャ", "ュ", "ョ" };    public static void main(String[] args) {        String str = "12356キがしょ1全ジュ123ぴゃ4567ガ89012ジュ123456";        String result = convert(str, 9, new StringBuffer());        System.out.println(result);    }    public static String convert(String str, int subLen, StringBuffer sb) {        int i = 1;        while (i <= str.length()) {            if (str.substring(0, i).getBytes().length > subLen) {                i = Arrays.asList(ARR2).contains(str.substring(i - 1, i)) ?                         Arrays.asList(ARR).contains(str.substring(i - 2, i - 1)) ?                         i - 3 : i - 2 : i - 1;                sb.append(str.substring(0, i) + "\n");                return convert(str.substring(i, str.length()), subLen, sb);            } else {                if (i == str.length()) {                    sb.append(str.substring(0, i));                    break;                }                i++;            }        }        return sb.toString();    }}

运行结果:

12356キがしょ1全ジュ123ぴゃ4567ガ89012ジュ123456

总结:

主要采用了递归的方式循环截取,这样就可以把日语的音标都分割到一行内,完成按byte分割字符串。

注:有不对的地方,请随时指正。

———————————————————– By cheney ———————————————————–

原创粉丝点击