这里是replace的源码,我在看别人帖子的时候看见了,除了第一个if和最后一个while我大概明白之外,其他的if、while、for不明白有什么用处,所以就自己写了一个,下面是代码
public class ReplaceTest
{
public String Replace (char oldchar , char newchar , String s)
{
if(oldchar!=newchar)
{
char [] val = s.toCharArray() ;
for(int i = 0 ; i < val.length ; i ++)
{
val[i] = (val[i]==oldchar)?newchar:val[i] ;
}
return new String(val) ;
}
return s ;
}
public ReplaceTest ()
{
System.out.println(Replace ('1','0',"111116")) ;
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
new ReplaceTest () ;
}
}
我觉得我的也能用啊。。测试了几次也没有出错。所以1、那几个if、while、for有什么用呢?2、我这样写,错误的地方在哪里?
(求轻喷,没有看不起java的意思,也没有看得起自己的意思:》)
java,replace的源码为什么要写那么长?下有图和代码
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 十八年后又是一条好汉 2017-05-11 14:43关注
个人理解,仅供参考:
1、java源码的第一个while,应该是为了在“没有字符匹配”场景下提高效率,直接返回自身
2、java源码最后调用这个包私有的构造器String(char[] value, boolean share),也可以提高效率,不用再拷贝一遍char数组。
3、你的版本,首先调toCharArray()方法 会将整个数组拷贝一遍。
4、最后调用的单参数构造器String(char value[]),又会将整个数组拷贝一遍。所以,在无匹配字符,以及长字符串下,应该是源码效率高。
另,java SE源码有随jdk发布,在jdk的安装目录下,有个名叫src的zip包。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
- ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
- ¥15 cmd cl 0x000007b
- ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
- ¥500 火焰左右视图、视差(基于双目相机)
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号