A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李光耀 中级黑马   /  2013-7-18 19:48  /  2238 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test10 {

  2. /**
  3. * 10、 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
  4. * 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,
  5. * 输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
  6. *
  7. * @param args
  8. */
  9. public static void main(String[] args) {

  10. String str = "我ABC汉DEF";
  11. System.out.println("截取前的字符串:"+str);
  12. //传入到方法中,截取字符串
  13. String ss = split(str,6);
  14. System.out.println("截取后的字符串:"+ss);
  15. }

  16. public static String split(String str, int i) {
  17. // 定义一个变量接收截取的字符
  18. String str1 = "";
  19. // 将接收到的字符串变成字节数组。
  20. byte[] arr = str.getBytes();
  21. //当截取字节数大于1时
  22. if (i > 1) {
  23. //判断截取的字节的对应的元素是否是负数,如果是负数 <FONT color=red>  <FONT size=4>这块有问题  当截取字节数<STRONG> i</STRONG> 是5的话,应该截取"我ABC",但是截取的是"我AB"  应该怎么修改呢</FONT></FONT>
  24. if (arr[i] < 0) {
  25. str1 = new String(arr, 0, --i);
  26. } else {
  27. str1 = new String(arr, 0, i);
  28. }
  29. //当截取字节是1,判断第一个字节也就是数组角标0的元素是否小于0;
  30. } else if (i == 1) {
  31. //小于0,不打印字节。 str1默认是""。
  32. if (arr[--i] < 0) {
  33. System.out.println(str1);
  34. } else {
  35. //不小于0,就赋值
  36. str1 = new String(arr, 0, i);
  37. }
  38. //如果截取字节小于1,就抛异常。
  39. } else {
  40. throw new RuntimeException("输入错误!!!请输入大于0的整数");
  41. }
  42. //将截取的字节返回。
  43. return str1;
  44. }
  45. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

7 个回复

倒序浏览
不应该判断arr[i] < 0,应该判断arr[i-1] < 0.否则你的i=5,那arr[5]读到的是“汉”的前半,是负的。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
草貌路飞 发表于 2013-7-18 20:13
不应该判断arr < 0,应该判断arr < 0.否则你的i=5,那arr[5]读到的是“汉”的前半,是负的。 ...

但是传别的数又会乱了
回复 使用道具 举报
草貌路飞 发表于 2013-7-18 20:13
不应该判断arr < 0,应该判断arr < 0.否则你的i=5,那arr[5]读到的是“汉”的前半,是负的。 ...

就是判断到中文的第二个字节就会出错,比如传2 或者7
回复 使用道具 举报
                String s="我asdsfa自己";

                char []l= s.toCharArray();
                StringBuilder num=new StringBuilder();
                         byte b=3;
                System.out.println(num.append(l, 0, b).toString());
这个不需要判断想截多少截多少。
回复 使用道具 举报
李光耀 发表于 2013-7-18 21:04
就是判断到中文的第二个字节就会出错,比如传2 或者7

里面在判断一次把
if (arr[i - 1] < 0)
{
        if(arr[i - 2] < 0)
                str1 = new String(arr, 0, i);
        else
                str1 = new String(arr, 0, --i);
}
回复 使用道具 举报
草貌路飞 发表于 2013-7-18 23:27
里面在判断一次把
if (arr < 0)
{

:lol  那我还真写对了呢,昨天晚上自己瞎捣鼓,写出来的也是这个,嘎嘎,已经交卷了
回复 使用道具 举报
yinjiek 发表于 2013-7-18 22:55
String s="我asdsfa自己";

                char []l= s.toCharArray();

这不行,要求按字节截取,你这个按的好像是个数截取,我刚才试了一下   
输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
你的直接输出 我ABC汉D  了、
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马