黑马程序员技术交流社区

标题: 按字节数截取字符串的问题!!!! [打印本页]

作者: 李光耀    时间: 2013-7-18 19:48
标题: 按字节数截取字符串的问题!!!!
  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. }
复制代码

作者: 草貌路飞    时间: 2013-7-18 20:13
不应该判断arr[i] < 0,应该判断arr[i-1] < 0.否则你的i=5,那arr[5]读到的是“汉”的前半,是负的。
作者: 李光耀    时间: 2013-7-18 20:34
草貌路飞 发表于 2013-7-18 20:13
不应该判断arr < 0,应该判断arr < 0.否则你的i=5,那arr[5]读到的是“汉”的前半,是负的。 ...

但是传别的数又会乱了
作者: 李光耀    时间: 2013-7-18 21:04
草貌路飞 发表于 2013-7-18 20:13
不应该判断arr < 0,应该判断arr < 0.否则你的i=5,那arr[5]读到的是“汉”的前半,是负的。 ...

就是判断到中文的第二个字节就会出错,比如传2 或者7
作者: yinjiek    时间: 2013-7-18 22:55
                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 23:27
李光耀 发表于 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-19 10:06
草貌路飞 发表于 2013-7-18 23:27
里面在判断一次把
if (arr < 0)
{

:lol  那我还真写对了呢,昨天晚上自己瞎捣鼓,写出来的也是这个,嘎嘎,已经交卷了
作者: 李光耀    时间: 2013-7-19 10:11
yinjiek 发表于 2013-7-18 22:55
String s="我asdsfa自己";

                char []l= s.toCharArray();

这不行,要求按字节截取,你这个按的好像是个数截取,我刚才试了一下   
输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
你的直接输出 我ABC汉D  了、




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2