行业资讯
📅 2026/7/15 16:09:05
关于java.lang.String常用方法全解析以及代码单元、码点等的总结思考
String类的使用频率非常高几乎所有的String API都很有用。代码单元定义字符编码的最小存储单位char charAt(int index):返回指定位置的代码单元。通常来说在java中字母以及一些常用的字符都是一个代码单元的。java在内存中的字符编码是utf16而在源码文件和class文件中编码是utf8。在utf8中一个汉字占3个字节(2万多汉字)或4个字节(5万多汉字)而utf8是网络传输中最通用的字符编码。在utf16中一个汉字占2个字节少数汉字占用4个字节。uft8是可变编码占用1~6字节。一个字节就是一个代码单元。uft16也是可变编码占用2个或者4个字节。两个字节就是一个代码单元。汉字数量太多往往一个代码单元表示不了。我们只考虑java在运行时对汉字的编码因为运行时才是关键即认识到java运行时的编码(也叫作内码)采用的是utf16编码。一个代码单元就是2个字节(16位)。有些生僻字符(比如一些生僻汉字)占用2个代码单元(32位)即4个字节。码点定义一个字符对应的编码可以简单的理解为字符。即**一个码点就是一个字符。**根据上面所说的一个码点可以是1个或2个代码单元组成。2个代码单元组成的字符也称作辅助字符。int codePointAt(int index):返回指定位置的开始的码点。 int offsetByCodePoints(int startIndex, int cpCount):返回从startIndex码点开始cpCount个码点后的码点索引这里有我弄了比较久才理解的东西。什么叫做指定位置、码点索引第二个方法是不是有病啊我都知道初始码点索引和向后推的码点个数了为什么还有这个方法来计算码点索引呢直接做个加法不就好了看一下代码Strings123;可以知道它是4个字符4个码点字符长度是5有5个代码单元。随便说一下java中的字符长度length()就是代码单元长度和我们平常理解的字符个数不是绝对等同的一个东西(虽然大多数是相同的值于是乎变成了一个难以发现的坑)。码点索引如下我们有字符“123”1码点索引02码点索引13码点索引2码点索引3和4可以看到第四个字符(码点)占用了两个码点索引。虽然书上是说叫做码点索引但是理解起来跟寻常思维不一样我个人将指定位置和码点索引理解为代码单元索引(也可能是原版英文译为中文时的错误)。可以说java中任何涉及到字符串位置、索引(比如上面的码点索引)之类的东西一律都视为代码单元索引。其他一些常用的方法intcompareTo(Stringother):按照字典顺序如果字符串位于other之前返回一个负数如果字符串位于other之后返回一个正数如果两个字符串相等返回0IntStreamcodePoints():将这个字符串的码点作为一个流返回。调用toArray将它们放在一个数组中。newString(int[]codePoints,intoffset,intcount):用数组中从offset开始的count个码点构造一个字符串。booleanempty()boleanblank():如果字符串为空或者由空格组成返回true。booleanequals(Objectother):如果字符串和other相等返回true。booleanequalsIgnoreCase(Stringother):如果字符串与other相等(忽略大小写)返回true。booleanstartsWith(Stringprefix)booleanendsWith(Stringsuffix):如果字符串以prefix开头或以suffix或结尾则返回true。(PS:中文原版书籍中多了一个或字)intindexOf(Stringstr)intindexOf(Stringstr,intfromIndex):返回与字符串str或码点cp匹配的第一个子串的开始位置。从索引0或fromIndex开始匹配。如果在原始字符串中不存在str,则返回-1。intlastIndexOf(Stringstr)intlastIndexOf(Stringstr,intfromIndex)intlastIndexOf(Stringcp)intlastIndexOf(intcp)intlastIndexOf(intcp,intfromIndex):返回与字符串str或码点cp匹配的最后一个子串的开始位置。从原始字符串末尾或fromIndex开始匹配。intlength():返回字符串代码单元的个数。intcodePointCount(intstartIndex,intendIndex):返回startIndex和endIndex-1之间的码点个数。Stringreplace(CharSequenceoldString,CharSequencenewString):返回一个新字符串。这个字符串用newString代替原始字符串中所有的oldString。可以用String或StringBuilder对象作为CharSequence参数。Stringsubstring(intbeginIndex)Stringsubstring(intbeginIndex,intendIndex):返回一个新字符串。这个字符串包含原始字符串中从beginIndex到字符串末尾或endIndex-1的所有代码单元。StringtoLowerCase()StringtoUpperCase()返回一个新字符串。这个字符串将原始字符串中的大写字母改为小写字母或者将原始字符串中的所有小写字母改成大写字母。Stringtrim()Stringstrip():返回一个新字符串。这个字符串将删除原始字符串头部和尾部小于等于U0020的字符(trim)或空格(strip)。Stringjoin(CharSequencedelimiter,CharSequence...elements):返回一个新字符串用给定的定界符连接所有元素。Stringrepeat(intcount):返回一个字符串将当前字符串重复count次。注释在API注释中有一些CharSequence类型的参数。这是一种接口类型所有字符串都属于这个接口。欢迎点赞收藏转发。个人网站博客地址朗朗繁星的博客