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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小路飞 中级黑马   /  2013-3-18 07:38  /  1929 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么在针对某一段字符串进行操作的时候都是包含头不包含尾呢?

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

7 个回复

倒序浏览
你说的substring吧在截取的时候从头开始到某个字符,然后你会发现到的那个字符不在字符串内!
因为substring的方法就是这样规定的,如你要接到最后你就字符串点length截取,
如果是部分你indexOf 就可以
回复 使用道具 举报
  1. /*模拟一个subString方法*/

  2. class SubStringDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 String substr = subString("abcdefgh",2,5);
  7.                 System.out.println(substr);
  8.         }

  9.         public static String subString(String str,int start,int end)
  10.         {
  11.                 String str1 = str; //接收一个字符串
  12.                 int size = end - start; //用尾值减去头值,作为数组的长度
  13.                 int num = 0;
  14.                 char[] ch = new char[size]; //创建一个字符数组,用来存储截取的字符
  15.                 char[] chr = str1.toCharArray(); //将接收的字符串转换为数组
  16.                 while (start < end) //把截取的字符写入字符数组
  17.                 {
  18.                         ch[num] = chr[start];
  19.                         num++;
  20.                         start++;
  21.                 }
  22.                 return new String(ch);//返回截取的字符串
  23.         }
  24. }

  25. //我个人是这样理解的,包含头,不包含尾,截取的字符串长度 = end - start;
复制代码
回复 使用道具 举报
给你一个参考://截取小数点后两位的数据
double a=786453.9553;
String b=Double.toString(a);                   //首先将带小数点的double数据转换成String型,
String t=b.substring(0,b.indexOf(".")+3 );    //然后获取小数点在字符串中第一次出现的索引值,然后以此位置的下一位为开始,增加两位结束,使用substring()方法                                                                                               
回复 使用道具 举报
一般来说,这是java中的一种规定,都默认是包含头,不包含尾,以后在开发的时候,最好也要这样做。
回复 使用道具 举报
这是java中的一种规定,都默认是包含头,不包含尾,以后在开发的时候,最好也要这样做。
我的理解是为了和角标对应,角标从0开始,长度从1开始,前边的值可以理解为角标,后边可以理解为长度。
角标就是长度-1,取值是按角标取的,就形成了包含头不包含尾。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
李尧 高级黑马 2013-3-18 16:33:54
7#
楼上已经说得很清楚了,就是这么规定的.你要问为什么这么规定,那只有java初始开发人员才知道.
但是不赞同楼上的说法,substring(beginIndex, endIndex) endIndex最好不要理解为长度,
例如 String str="abcd"; 我要截取"bc"  subs=str.subString(1,3);你如果把3理解为长度,那就麻烦大了.
另,友情提示.
这个构造方法 String(byte[] arr,int start,int length);
第三个参数length 表示的是new 的String的长度,而不是byte[]的结束角标.我之前总是跟subString() 搞混.希望对你有帮助.
回复 使用道具 举报
感谢各位的解惑!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马