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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qq8921310 高级黑马   /  2014-10-12 17:41  /  1906 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我再练习模拟Trim方法时写的代码
/*
模拟trim方法,去除字符串两端的空格
*/

class TrimTest
{
public static void main(String[] args)
{
  String str = "     asdasdcvj   ";
  

  System.out.println(str);
  str =CopyTrim.copyTrim(str);
  System.out.println(str);
}

}
class CopyTrim
{
public static String copyTrim(String str)
{
  int start =0;
  int end = str.length()-1;
  String str1 = new String();
  while(start<=end && str.charAt(start)==' ')
  {
   
  # str1 = str.substring(start); //把值重新赋给 str1
   start++;
   System.out.println(str1+"...."+start);
  }
   
  while(start<=end && str.charAt(end)==' ')
  {
  # str1 =str.substring(0,end);//把值重新赋给 str1
   end--;
   System.out.println(str1+"...."+end);
  }
  return str1;
}
}
结果并不和我想的一样。两个Str1 好像并没有关系一样。
为什么会出现这种情况、
当str1 =str.substring(0,end);改成 str1 =str.substring(start,end);时。结果才是正确的。
一方面说明STring不可以被改变 只是建立了新的字符串。为什么str1 只指向 new的,而不指向 最新赋值的呢?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

10 个回复

倒序浏览
运行结果、。

QQ截图20141012174146.png (3.05 KB, 下载次数: 17)

QQ截图20141012174146.png
回复 使用道具 举报
兄弟 str1 =str.substring(0,end);你这句话是把 str 这个变量指向字符串(也就是最初字符串)用subString方法切割 赋给str1  如果你用的是 str1 =str1.substring(0,end);就可以了

为什么str1 只指向 new的,而不指向 最新赋值的呢?——这是你原话,其实str1是指向最新赋值的,只不过你没有去切割它,而是切割的str,你要切割它要写str1.subString();

希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上正解
回复 使用道具 举报
英雄传说ER 发表于 2014-10-12 18:35
兄弟 str1 =str.substring(0,end);你这句话是把 str 这个变量指向字符串(也就是最初字符串)用subString ...

哦。看懂了。太感谢了。
回复 使用道具 举报
英雄传说ER 发表于 2014-10-12 18:35
兄弟 str1 =str.substring(0,end);你这句话是把 str 这个变量指向字符串(也就是最初字符串)用subString ...

我按照你说的试了一下,提示角标越界了。
回复 使用道具 举报
qq8921310 发表于 2014-10-13 00:15
我按照你说的试了一下,提示角标越界了。

sorry  我没去运行 谢谢同学的提醒  因为你end的赋值是 int end= str.length()-1; 所以此处会提示角标越界,end是最后角标的意思,因此你切割str1的时候 这里的end应该是str1的最后角标即str1.length()-1;你也可以写 end-start;两个都行
回复 使用道具 举报
英雄传说ER 发表于 2014-10-13 08:26
sorry  我没去运行 谢谢同学的提醒  因为你end的赋值是 int end= str.length()-1; 所以此处会提示角标越 ...

越界的问题我已经看出来了。但是运行的结果不太理想
第一个while只运行了两次就停了。我看不出来为什么会这样。

QQ截图20141013090258.png (2.45 KB, 下载次数: 19)

QQ截图20141013090258.png
回复 使用道具 举报
英雄传说ER 发表于 2014-10-13 08:26
sorry  我没去运行 谢谢同学的提醒  因为你end的赋值是 int end= str.length()-1; 所以此处会提示角标越 ...

已经搞定了。之前我对切割和赋值这一点理解有问题。现在已经想明白了。谢谢了。
回复 使用道具 举报
mark一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马