成人高考,自考,网络教育,在职研究生等学历教育
在线报名在线报名
培训课程培训课程
分站加盟分站加盟
培训学校培训学校
VIP服务VIP服务
复习指导复习指导
会员中心会员中心
论坛交流论坛交流
  • 首页
    • 首页
  • 学历教育
    • 学历教育
    • 成人高考
    • 自学考试
    • 网络教育
    • 在职研究生
    • 中专中技
    • 高考招生
  • 职业培训
    • 职业培训
    • 公务员
    • 外语类
    • 财会类
    • 建筑类
    • 职业资格
    • 医药类
    • IT认证
    • 外贸类
    • 更多>>
  • 高考出国
    • 高考出国
  • 在线报名
    • 在线报名
  • 网络课堂
    • 网络课堂
  • 关于我们
    • 关于我们

 您的位置:真才教育 >> 职业培训 >> IT认证

Java按字节长度截取字符串

【真才教育:中国教育考试第一门户】   模拟考场   视频课程   人气:

编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。

  public static String substring(String str, int toCount,String more)

  {

  int reInt = 0;

  String reStr = "";

  if (str == null)

  return "";

  char[] tempChar = str.toCharArray();

  for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) {

  String s1 = str.valueOf(tempChar[kk]);

  byte[] b = s1.getBytes();

  reInt += b.length;

  reStr += tempChar[kk];

  }

  if (toCount == reInt || (toCount == reInt - 1))

  reStr += more;

  return reStr;

  }

  Web应用程序在浏览器中显示字符串时,由于显示长度的限制,常常需要将字符串截取后再进行显示。但目前很多流行的语言,如C#、Java内部采用的都是 Unicode 16(UCS2)编码,在这种编码中所有的字符都是两个字符,因此,如果要截取的字符串是中、英文、数字混合的,就会产生问题,如下面的字符串:

  String s = "a加b等于c,如果a等1、b等于2,那么c等3";

  上面的字符串既有汉字,又有英文字符和数字。如果要截取前6个字节的字符,应该是”a加b等",但如果用substring方法截取前6个字符就成了"a 加b等于c"。产生这个问题的原因是将substring方法将双字节的汉字当成一个字节的字符(UCS2字符)处理了。要解决这个问题的方法是首先得到该字符串的UCS2编码的字节数组,如下面的代码如下:

  byte[] bytes = s.getBytes("Unicode");

  由于上面生成的字节数组中前两个字节是标志位,bytes[0] = -2,bytes[1] = -1,因此,要从第三个字节开始扫描,对于一个英文或数字字符,UCS2编码的第二个字节是相应的ASCII,第一个字节是0,如a的UCS2编码是0  97,而汉字两个字节都不为0,因此,可以利于UCS2编码的这个规则来计算实际的字节数,该方法的实现代码如下:

  public static String bSubstring(String s, int length) throws Exception

  {

  byte[] bytes = s.getBytes("Unicode");

  int n = 0; // 表示当前的字节数

  int i = 2; // 要截取的字节数,从第3个字节开始

  for (; i < bytes.length && n < length; i++)

  {

  // 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节

if (i % 2 == 1)

  {

  n++; // 在UCS2第二个字节时n加1

  }

  else

  {

  // 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节

  if (bytes[i] != 0)

  {

  n++;

  }

  }

  }

  // 如果i为奇数时,处理成偶数

  if (i % 2 == 1)

  {

  // 该UCS2字符是汉字时,去掉这个截一半的汉字

  if (bytes[i - 1] != 0)

  i = i - 1;

  // 该UCS2字符是字母或数字,则保留该字符

  else

  i = i + 1;

  }

  return new String(bytes, 0, i, "Unicode");

  }

  下面代码使用了bSubstring方法:

  String s = "a加b等于c,如果a等1、b等于2,那么c等3";

  System.out.println(bSubstring(s, 6));

  上面的代码截取的字符串是"a加b等"。

  

 

编辑/真才教育  bingyi>>>>>>查看更多文章

关键字:JAVA认证 考试

 

发布时间:2010.07.28    来源:教育网

【收藏此页】【大 中 小】【打印】【回到顶部】
上一篇文章:2010年成人高考专升本政治时事复习手册
下一篇文章:教育部公布中小学“减负”试点 力推素质教育
文章搜索:
最新资讯
  • ·[中专中技]教育部公布中小学“减负”试点 力推素质
  • ·[高考招生]内蒙古2011年高考艺术类招生实施办法公
  • ·[高考招生]西藏2011年艺术类专业招生12月月14日开
  • ·[中专中技]中考成绩提高必须坚持九大法则
  • ·[中专中技]沈阳市中考时间调整网上调查开始
  • ·[招生信息]2011年全国研考人数比2010年增11万
  • ·[在职研究生]深圳2011年考研人数又上新台阶
  • ·[成人高考]北京今年11万人参加成考 实考率达到九成
  • ·[网站推广技巧心得]如何快速提高网站的PR值
  • ·[网站推广技巧心得]什么是网站PR值
模拟题
成考
自考
中考
  • 2010年成考专升本政治时事复习手册
  • 成考复习:语文主观题要从原文中找答案
  • 成考专升本高数(一)模拟题及解析
  • 2010年成人高考高起点物理命题预测试题(2
  • 2010年成人高考高起点物理命题预测试题(3
  • 2010年成人高考高起点物理命题预测试题(4
  • 2010年成人高考高起点物理命题预测试题(5
  • 2010年成人高考高起点物理命题预测试题(6
  • 2010年成人高考高起点物理命题预测试题(7
  • 2010年成人高考高起点物理命题预测试题(8
  • 全国2009年10月高等教育自学考试办公自动
  • 生理学试题_全国2009年7月自考试卷
  • 全国2009年10月高等教育自学考试综合英语
  • 全国2009年7月高等教育自学考试综合英语(
  • 全国2009年7月高等教育自学考试大学语文试
  • 全国2006年4月高等教育自学考试新闻学概论
  • 全国2009年10月高等教育自学考试中国近现
  • 全国2009年1月自考学前比较教育试题
  • 2008年1月全国自学考试试题幼儿文学试卷
  • 全国2009年7月高等教育自学考试中国古代文
  • 银行从业资格考试公共基础试题
  • 银行从业资格考试公共基础试题
  • 南京一中三年级政治模拟练习I卷
  • 南京一中三年级政治模拟练习H卷
  • 南京一中三年级政治模拟练习G卷
  • 南京一中三年级政治模拟练习F卷
  • 南京一中三年级政治模拟练习E卷
  • 南京一中三年级政治模拟练习D卷
  • 南京一中三年级政治模拟练习C卷
  • 南京一中三年级历史模拟练习I卷
报考指南
更多..
  • 2010年成人高考各科目复习指南
  • 教育部通知,成考专升本报考严格审查考生学
  • 分析成人高考招生院校有3种不同类型
  • 成人高考新生答卷注意事项及应试守则
  • 决胜成人高考的七个鲜为人知的方法
  • 成考辅导班四类模式 考生可根据个人基础选
  • 法律类专业——法学专业介绍
  • 管理类专业——人力资源管理
  • 营销类的相关专业介绍
  • 2010年成人高考考试大纲沿用2007年考试大
信息推荐
  • ·[外语类]新托福阅读八大题型完整解析7
  • ·[学历教育]网络教育助你工作学历双赢
  • ·[复习指导]避免慌张坚持到底 考研备考应关注心
  • ·[ 成人高校]广州美术学院继续教育学院
  • ·[专业指导]专家教你十招通关自考电子商务专业
  • ·[招生动态]华东理工大学成人高等教育专业介绍
  • ·[成考政策]中原工学院授予成人高等教育本科毕
  • ·[ 成人高校]江西广播电视大学
  • ·[报考指南]2011年考研报考指南之“211工程”高
  • ·[招生动态]信阳师范学院成人高等学历教育专业
  • 真才教育首页 | 报名须知 | 关于我们 | 成人高考 | 职业培训 | 高考出国 | 在线报名 | 联系我们 | 网站地图
    报名地址:广州市天河区中山大道西8号天河商贸大厦605   咨询报名电话:020-33747854   020-87515503   020-89736978 020-33781291
    传真:020-87515503   QQ:353886838   763563818   真才教育培训网会有专人为您服务
    粤ICP备09072464号