安康信息港
旅游
当前位置:首页 > 旅游

从Java编码中截取给定宽度中英文字符串

发布时间:2019-06-20 04:11:54 编辑:笔名

  Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。 因此Java要对这些字节流经行转化。 char是unicode的,而byte是字节。我们在写JSP页面时可能没注意到JSP作为回显终端,也是byte的,所以在从JSP页面中读取表单和写入数据 (Javabean)时要注意页面的编码. 一个传统的解决方案是所有的应用包括页面编码设置\数据库编码设置都设定一致,比如gbk(gbk是gb2312的扩展集,支持的字符要多些). 现在又有个问题了,既然Java内核是unicode的编码,那么字符串String lml="我爱金信桥tbs,tbs金信桥爱我"的长度应该是中文字符和英文字符的个数和,即ngth()==17. 好了,如果我们想截取长度为14的字符串,那么应该:bstring(0,13);返回“我爱金信桥tbs,tbs金”. 这没问题吧? 但如果是应用中要求我们截取"固定回显长度"的字符串回显到JSP页面,那应该怎么办呢?所谓“固定回显长度”是指一个区域纯英文能显示x个,纯中文能显示x/2个.假设一个JSP页面中,有个表格,其中一列宽度为13个纯英文字符,我们想显示主题,主题可以为中文或英文.如果我们简单地设定了取前13个字符,那么在英文情况下是没问题的,能正确显示截取的前13个. 但汉字呢?一个汉字要占两个英文的宽度的.所以取了13个汉字就超过了列的宽度,破坏了布局. 那取6个字符好了! 恩,这到是没破坏布局,但你不觉得英文的情况下浪费了一般的宽度么? 哦,那就不好办了,中英文混合的串确实麻烦... 我在做mail系统时,在邮件列表中有一列加上了正文的内容提示(前50个字符,有点类似gmail),内容是可以有中文和英文混合的,所以为了尽量提示多些,不能采 用笨方法:直接取25个字符,保证中文没问题,英文浪费去吧~~~ 后来仔细研究了一下,可以这样解决:从字符串转换成byte,然后判断汉字的个数,是汉字就取占两个空,不是汉字就占一个空.这就是为什么一开 始我要提提Java中的byte----char,o(∩_∩)o...哈哈 注意到这里有个trick,就是如果截取的是半个汉字,要丢弃掉!!否则,可能出现一个?号. 用法: string str=bstring(lml,14); intln(str); 输出: 我爱金信桥tbs, 核心代码如下: /** * 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符) * * @param char * c, 需要判断的字符 * @return boolean, 返回true,Ascill字符 */ public static boolean isLetter(char c) { int k = 0x80; return c / k == 0 ? true : false; } /** * 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1 * * @param String * s ,需要得到长度的字符串 * @return int, 得到的字符串长度 */ public static int length(String s) { if (s == null) return 0; char[] c = CharArray(); int len = 0; for (int i = 0; i ngth; i++) { len++; if (!isLetter(c[i])) { len++; } } return len; } /** * 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位 * * @author patriotlml * @param String * origin, 原始字符串 * @param int * len, 截取长度(一个汉字长度按2算的) * @return String, 返回的字符串 */ public static String substring(String origin, int len) { if (origin == null || uals("")||len1) return ""; byte[] strByte = new byte[len]; if (len ngth(origin)){ return origin;} raycopy(tBytes(), 0, strByte, 0, len); int count = 0; for (int i = 0; i len; i++) { int value = (int) strByte[i]; if (value 0) { count++; } } if (count % 2 != 0) { len = (len == 1) ? ++len : --len; } return new String(strByte, 0, len); }

  查看本文来源

四磨汤是否适合婴儿
新生儿腹胀腹痛怎么办
四磨汤怎么给小孩喝
友情链接
内江小儿康复科医院哪家好 厦门心血管内科医院哪家好 河池康复科医院哪家好 曲靖康复医学科医院哪家好 曲靖其它科室医院哪家好 玉溪神经外科医院哪家好 临沧急诊科医院哪家好 临沧体检科医院哪家好 楚雄麻醉医学科医院哪家好 楚雄医疗美容医院哪家好 楚雄复杂先心病医院哪家好 楚雄肝炎医院哪家好 红河儿科医院哪家好 西双版纳肝胆外科医院哪家好 大理外伤科医院哪家好 德宏儿科医院哪家好 怒江中医妇产科医院哪家好 怒江全科医院哪家好 嘉峪关种植科医院哪家好 金昌感染内科医院哪家好 金昌老年病科医院哪家好 天水动脉导管未闭医院哪家好 天水复杂先心病医院哪家好 武威老年病科医院哪家好 平凉种植科医院哪家好 哈密急诊科医院哪家好 琼海计划生育科医院哪家好 儋州成瘾医学科医院哪家好 儋州肾病内科医院哪家好 儋州中医内科医院哪家好 儋州功能检查科医院哪家好 儋州手外科医院哪家好 万宁药学部医院哪家好 东方肿瘤综合科医院哪家好 东方生殖医学科医院哪家好 定安泌尿外科医院哪家好 屯昌小儿心内科医院哪家好 澄迈中医儿科医院哪家好 澄迈皮肤科医院哪家好 临高心脏科医院哪家好 乐东中医骨科医院哪家好 乐东其他医院哪家好 乐东干部诊疗科医院哪家好 陵水眼底医院哪家好 琼中中医推拿按摩科医院哪家好 铁门关中医神经内科医院哪家好 铁门关中医皮肤科医院哪家好 双河口腔科医院哪家好 可克达拉功能神经外科医院哪家好 可克达拉颌面外科医院哪家好 昆玉小儿皮肤科医院哪家好 昆玉微创外科医院哪家好 佛山一级医院哪家好 东莞一级医院哪家好 东莞一丙医院哪家好 徐州二级医院哪家好 保亭有哪些口腔预防科医院 湖州其他医院哪家好 台州三级医院哪家好 西宁有哪些心血管内科医院 永州二丙医院哪家好 海北有哪些体检科医院 永州一丙医院哪家好 三门峡有哪些一丙医院