你没有看错我说的就是那个最常用的java.lang.String,String可以说在Java中使用量最广泛的类了。

但是我却发现我弄错了他的一个API(也可以说是两个API),这个API是关于字符串替换的。

我的错误见解

之前我一直以为String有个API是这样子的,String replace(String oldString, String newString) 用来替换String中的第一个oldString为newString,这可能和我之前做的东西基本山替换的都是单一的字符串有关吧。

但是当我看到队友写的代码int containStringNumber = string.length() - string.replace("containString", "").length(),我认为containStringNumber的值是0或者1,但是我错了。这个结果可能会大于1的。

实际情况

通过API文档可以看出来String有4个替换方法:

1. String	replace(char oldChar, char newChar)
描述:Returns a string resulting from replacing all occurrences of oldChar in this string with newChar.
谷歌翻译:返回使用newChar替换此字符串中所有出现的oldChar而产生的字符串。
2. String replace(CharSequence target, CharSequence replacement)
描述:Replaces each substring of this string that matches the literal target sequence with the specified literal replacement sequence.
谷歌翻译: 将与该文字目标序列匹配的此字符串的每个子字符串替换为指定的文字替换序列。
3. String replaceAll(String regex, String replacement)
描述:Replaces each substring of this string that matches the given regular expression with the given replacement.
谷歌翻译:将给定替换的给定正则表达式匹配的此字符串的每个子字符串替换。
4. String replaceFirst(String regex, String replacement)
描述:Replaces the first substring of this string that matches the given regular expression with the given replacement.
谷歌翻译:将给定替换的给定正则表达式匹配的此字符串的第一个子字符串替换。

是的,String里面根本没有跟那个我自以为是的方法。

第一个方法是替换第一个没错,但是替换的是一个char,不是String。

第二个方法是替换的CharSequence(包括String, StringBuffer, StringBuilder),但是替换的是全部。

第三个replaceAll是替换全部的字符串正则表达式,

第四个是缺实是替换了第一个,但是人家名字写得明明白白的replaceFirst,而且替换的也是正则表达式。

教训与总结

这让我想起来前天的一篇文章《On The Value Of Fundamentals In Software Development 》,英文不好的可以自己翻译下。

我要好好学习Java的API了,白干了四年了,纯属一级菜鸟啊。

java.lang.String中的replace方法到底替换了一个还是全部替换了。的更多相关文章

  1. java.lang.String中的trim()方法的详细说明(转)

    String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗? 一直以为Trim()方法就是把字符串两端的空格字符给删去,其实我错了,而且错的比较离谱. 首先我直接反编译String ...

  2. java.lang.String 类的所有方法

    java.lang.String 类的所有方法 方法摘要 char charAt(int index) 返回指定索引处的 char 值. int codePointAt(int index) 返回指定 ...

  3. java:常用类(包装类,equals和==的比较,Date,java.lang.String中常用方法,枚举enum)

    *包装类: 将基本类型封装成类,其中包含属性和方法以方便对象操作. *byte---->Byte *short--->Short *long--->Long *float---> ...

  4. java.lang.Math中的基本方法

    java.lang.Math类提供的方法都是static的,“静态引入 ”使得不必每次在调用类方法时都在方法前写上类名:             import static java.lang.Mat ...

  5. mybatis invalid comparison: java.sql.Timestamp and java.lang.String报错解决方法

    这个错的意思是:java.sql.Timestamp和java.lang.String无效的比较 错误的原因是:拿传入的时间类型参数与空字符串进行比较就会报这个异常 解决方法:只保留非null判断就可 ...

  6. java基础---->String中的split方法的原理

    这里面主要介绍一下关于String类中的split方法的使用以及原理. split函数的说明 split函数java docs的说明: When there is a positive-width m ...

  7. Java的String中的subString()方法

    方法如下: public String substring(int beginIndex, int endIndex) 第一个int为开始的索引,对应String数字中的开始位置, 第二个是截止的索引 ...

  8. java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String错误的解决方法

    mmobjectid是在Oracle数据库中对应的是Number类型的,在JavaBean中定义的是Long类型的. List<BigDecimal> mmobjidAllFromMars ...

  9. java.lang.String里面的trim()方法——删除首尾空格

    结果如图 package com.softeasy.test1; public class String_trim { public static void main(String[] args) { ...

随机推荐

  1. 20175120彭宇辰 《Java程序设计》第十周学习总结

    教材内容总结 十二章 Java多线程机制 一.进程与线程.操作系统与进程 -线程不是进程,是比进程更小的执行单位.但与进程不同的是,线程的中断和恢复可以更加节省系统的开销. -线程可以共享进程中的某些 ...

  2. nginx配置-location

    以 =开头表示精确匹配如 A 中只匹配根目录结尾的请求,后面不能带任何字符串. ^~ 开头表示uri以某个常规字符串开头,不是正则匹配 ~ 开头表示区分大小写的正则匹配; ~* 开头表示不区分大小写的 ...

  3. English-such as, for example, include and contain

    such as 后接动词,通常用动名词,有时也可用动词原形 for example 后接动词,用动名词 include vt. 包含,包括 后接动词,用动名词 英英: If one thing inc ...

  4. Eclipse Luna安装Hibernate Tools 4.2.3不显示,设置Eclipse运行的JDK

    Eclipse Luna安装Hibernate Tools 4.2.3不显示,设置Eclipse运行的JDK,有需要的朋友可以参考下. eclipse-jee-luna-SR2中安装Hibernate ...

  5. 【python】 读写文件

    #标准输出 sys.stdout.write() sys.stderr.write() #标准输入 while True : try: line = raw_input().rstrip(); exc ...

  6. fiddler接口知识

    1. 访问接口时经常会出现乱码的情况,需要fiddler解码操作 2.域名过滤

  7. JavaScript的日期对象

    1.Date对象用来处理日期和时间. 2.创建Date对象的语法: var myDate = new Date(); 3.Date对象的常用方法: 格式:Date.XX(); getDate() 从 ...

  8. SQLAlchemy应用到Flask中

    安装模块 pip install Flask-SQLAlchemy 加入Flask-SQLAlchemy第三方组件 from flask import Flask # 导入Flask-SQLAlche ...

  9. 使用雪花算法为分布式下全局ID、订单号等简单解决方案考虑到时钟回拨

    1.snowflake简介         互联网快速发展的今天,分布式应用系统已经见怪不怪,在分布式系统中,我们需要各种各样的ID,既然是ID那么必然是要保证全局唯一,除此之外,不同当业务还需要不同 ...

  10. elementUI table宽度自适应fit

    :fit='true' 或者直接为 fit