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

10黑马币
问题类型:
java
问题描述:

@在第一次出现的时候是在3的位置,这个没错,可是在后面的时候我又创建了@的位置,

为什么在最后一次出现@的位置还是3了,请问这是为什么,不是说最后一次出现的位置吗?因该是2才对啊!
  1. String s1 = "gdh@qq.com";

  2. System.out.println(s1.substring(1,4));//包含1但不包含4;

  3. System.out.println(s1.indexOf("@"));

  4. System.out.println(s1.substring(2,6));
  5. System.out.println(s1.lastIndexOf("@")); //最后一个出现的位置;
复制代码



29 个回复

正序浏览
给我点分好不?
回复 使用道具 举报
首先解释一下substring(),返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。调用substring方法后,原字符串并不改变。
另外就是lastIndexOf()返回指定子字符串在此字符串中最右边出现处的索引,从后面开始查找,但是返回的还是该字符串的索引,而不是从后面开始数!所以调用indexOf()和lastIndexOf()的返回值是相同的。
回复 使用道具 举报
好长时间没来论坛了,论坛变得越来越人性化了!
回复 使用道具 举报
S1从一开始被赋值:String s1 = "gdh@qq.com"  之后从来都没变过,之后都是打印的截取的子串。楼主可以看一下相关的API文档。  既然S1一直都是“gdh@qq.com”,那么最后出现@的位置当然是角标3咯。:P
回复 使用道具 举报
String是有返回值的每次操作都是产生新的字符串,老的字符串是不变的呀
回复 使用道具 举报
这位同学,我想说你可能把subString()这个方法理解错了,s1.subString()并没有改变s1这个字符串。其实这样写就是你想要的答案:2 了    如下:s2=s1.subString(2,6);System.out.println(s2.lastIndexof('@'))。
回复 使用道具 举报
s1又没有重新赋值没有任何修改
回复 使用道具 举报
夜半风 发表于 2014-8-24 20:51
直接上代码
String s1 = "gdh@qq.com";
System.out.println(s1.substring(1,4).indexOf("@"));

结果是
2
1
回复 使用道具 举报
直接上代码
String s1 = "gdh@qq.com";
System.out.println(s1.substring(1,4).indexOf("@"));
System.out.println(s1.substring(2,6).lastIndexOf("@"));
回复 使用道具 举报
MeryStyle 来自手机 中级黑马 2014-8-24 06:05:41
20#
将操作后的结果保存到一个 String类型的字符串中,然后再对这个字符串进行操作会得到你想要的答案。因为对原字符的操作并不影响它自身,而是将其结果保存到其它变量,这样也起到了保护原字符串的作用。
回复 使用道具 举报
s1 一直都没变化吧!
回复 使用道具 举报
对于s1调用它的函数subString,replace等方法,这些方法的返回值并没有赋值给s1
那么
s1这个String类型的指针并没有改变位置,他依然指向着常量池中"gdh@qq.com"的位置,
回复 使用道具 举报
你也是新手?
回复 使用道具 举报
以为去字符串是是从零开始,“@”下标数是3,所以就是3了
回复 使用道具 举报
呵呵 ,你知道S1的值并没有改变吗,你要这样写String s1 = s1.substring(2,6)这样就会改变;变量是要重新赋值的,你截取的是一个字符串,但是没有赋值给原来的变量
回复 使用道具 举报
绕来绕去都是一样的,S1没有变化,@只出现了一次,都是3角标的位置
回复 使用道具 举报
String s1 = "gdh@qq.com";  String初始化之后就不能改变值了
回复 使用道具 举报
你只是使用方法截取了String对象的一部分,并没有把返回的对象指向s1,所以s1还是指向初始化时的字符串对象
回复 使用道具 举报
刘瑞 来自手机 中级黑马 2014-8-20 15:00:51
11#
不错,就是这样的
回复 使用道具 举报
滔哥 黑马帝 2014-8-20 14:36:47
10#
余攀 发表于 2014-8-20 14:21
涛哥,好问题,哈哈哈!

s1.substring(1,4) 是截取字符串“”,结果gh@q

测试这个功能啊!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马