你没有看错我说的就是那个最常用的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. ElasticSearch 简介概念及核心

    1.ES是什么 ES是面向文档的Nosql,这意味着它可以存储整个对象或文档.然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索.在es中,你可以对文档(而非成行成列的数据)进行索 ...

  2. php开发面试题---禁用cookie之后,如何使用session

    php开发面试题---禁用cookie之后,如何使用session 一.总结 一句话总结: 在每个url后面自动加上PHPSESSID的值即可,用户禁止cookie后,服务器仍会将sessionId以 ...

  3. Linux 下 VIM 的操作

    其实VI 和vim本质上没有多大区别,,但是VIM 可以高亮关键字,使得更受青睐 vim里面有3种模式:命令模式,编辑模式,末行模式 1. vim--->:set number VIM 打开文档 ...

  4. 解决修改 Linux 下的 PHP 环境变量不生效的方法

    这个问题出现服务器有多个 PHP 版本,php -v和phpinfo()显示两个不同的版本 最近真的,都给朋友解决问题了... phpinfo查看的 php 版本是 7.2.6,到 bash 去使用p ...

  5. xunit的assert常用部分方法解释

    布尔:True(返回bool的方法或者字段) 判断是否为trueFalse(返回bool的方法或者字段) 判断是否为false 字符串(区分大小写):Equal(期待结果,实际结果) 判断输出值和期待 ...

  6. 解决让刷新页面时不提示 "重试或取消”对话框

    如果刷新一个已经提交过的页面时,系统总是会提示一个 "重试或取消”的对话框.,如果是一个普通的页面,好象也无所谓,有就有,大不了多点一下.但是当我们是在子窗体中刷新父窗体时,就显得有点多余了 ...

  7. 解决“/bin/bash^M: bad interpreter: No such file or directory”

    在执行shell脚本时提示这样的错误主要是由于shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识.  查看脚本文件是dos格式还是unix格式的几种办 ...

  8. JumpServer堡垒机安装笔记

    厂商文档--一步一步安装CentOS(https://jumpserver.readthedocs.io/zh/master/setup_by_centos.html) 厂商文档--简单优化(http ...

  9. urllib库爬取实例

    from urllib import request import random def spider(url): user_agent_list = [ "Mozilla/5.0 (Win ...

  10. Numpy的基本运算及操作

    import numpy as np ''' 一.算术运算 元素级 1.标量 加减乘除 数组(元素级:位置对应) 自增和自减 通用函数 2.数组 +-*/ 数组 (元素级) 3.条件和布尔运算 a&g ...