字符串就是一连串的字符序列,Java提供了String、StringBuffer和StringBuilder三个类来处理字符串各种行为,其中包含了诸多实用方法

String类

String类是个不可变类,即一旦创建了一个String对象,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁
在Java9之前字符串采用char[]数组保存字符,因此字符串的每个字符占2个字节,在Java9之后采用byte[]数组再加一个enencoding-flag字段来保存字符,字符串的每个字符只占1个字节,字符串的功能方法不受影响。
String类提供了大量构造器来创建String对象,常用的如下所示:

  • String():创建一个包含0个字符串序列的String对象(并不返回null)
  • String(byte[] bytes, Charset charset):使用指定的字符集将指定的byte[]数组解码成一个新的String对象
  • String(byte[] bytes, int offset, int length):使用平台默认字符集将指定的byte[]数组从offset开始长度为length的子数组解码成一个新的String对象
  • String(byte[] bytes, int offset, int length, String charsetName):使用指定的字符集将指定的byte[]数组从offset开始长度为length的自舒服解码成一个新的String对象
  • String(byte[] bytes, String charsetName):使用指定的字符集将指定的byte[]数组解码成一个新的String对象
  • String(char[] value, int offset, int count):将指定的字符数组从offset开始长度为count的字符元素连缀成字符串
  • String(String original):根据字符串直接量创建String对象,也就是说创建的String对象是这个直接量的副本
  • String(StringBuffer buffer):根据StringBuffer对象来创建对应的String对象
  • String(StringBuilder builder):根据StringBuilder对象来创建对应的String对象
  • char charAt(int index):获取字符串中指定位置的字符,其中参数index指的字符串的序数,从0到length-1
jshell> String str = new String("davieyang.com")
str ==> "davieyang.com"
jshell> System.out.println("The sixth char is\n" + str.charAt(5));
The sixth char is
y
  • int compareTo(String anotherString):比较两个字符串大小,如果两个字符串相等则返回0,不相等时,从两个字符串第0个字符开始比较,返回第一个不相等的字符差。另一个情况,较长字符串的前面部分恰巧是较短的字符串,则返回他们的长度差
jshell> String str1 = new String("abcdefghijklmn");
str1 ==> "abcdefghijklmn"jshell> String str2 = new String("abcdefghij");
str2 ==> "abcdefghij"jshell> String str3 = new String("abcdefghijklmn");
str3 ==> "abcdefghijklmn"jshell> System.out.println("str1 compare to str2\n" + str1.compareTo(str2));
str1 compare to str2
4jshell> System.out.println("str1 compare to str3\n" + str1.compareTo(str3));
str1 compare to str3
0jshell> String str3 = new String("abcdefghijalmn");
str3 ==> "abcdefghijalmn"jshell> System.out.println("str1 compare to str3\n" + str1.compareTo(str3));
str1 compare to str3
10
  • String concat(String str):将该String对象与str链接在一起,与“+”功能相同
  • boolean contentEquals(StringBuffer sb):将该String对像鱼StringBuffer对象sb进行比较,字符序列相同则返回true
  • static String copyValueOf(char[] data):将字符数组连缀成字符串,与String(char[] content)构造器的功能相同
  • static String copyValueOf(char[], int offset, int count):将字符数组的子数组中的元素连缀成字符串,与String(char[] value, int offset, int count)构造器的功能相同
  • boolean endsWith(String suffix):返回该String对象是否以suffix结尾
jshell> String str1 = "com";
str1 ==> "com"jshell> String str2 = "davieyang.com"
str2 ==> "davieyang.com"jshell> System.out.println("str2 ends With(str1)" + str2.endsWith(str1));
str2 ends With(str1)true
  • boolean equals(Object anObject):将该字符串与指定对象比较,如果二者包含的字符序列相等,则返回true否则返回false
  • boolean equalsIgnoreCase(String str):与上一个方法类似,但忽略大小写
  • byte[] getBytes(): 将该String对象转换成byte数组
  • void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):该方法将字符串中从srcBegin开始,到srcEnd结束的字符串复制到dst字符数组中,其中dstBegin为目标字符数组的起始复制位置
jshell> char[] str1 = {'d', 'a', 'v', 'i', 'e', 'y', 'a', 'n', 'g', 'd', 'y'};
str1 ==> char[11] { 'd', 'a', 'v', 'i', 'e', 'y', 'a', 'n', 'g', 'd', 'y' }jshell> String str2 = new String("django");
str2 ==> "django"jshell> str2.getChars(0,3,str1,7);jshell> System.out.println(str1);
davieyadjay
  • int indexOf(int ch): 找出ch字符在该字符串中第一次出现的位置
  • int indexOf(int ch, int fromIndex):找出ch字符在该字符串中从fromIndex开始后第一次出现的位置
  • int indexOf(String str):找出str子字符串在该字符串中第一次出现的位置
  • int indexOf(String, int fromIndex):找出str子字符串在该字符串中从fromIndex开始后第一次出现的位置
jshell> String str1 = "www.daiveyang.com"
str1 ==> "www.daiveyang.com"jshell> String str2 = "ya";
str2 ==> "ya"jshell> System.out.println(str1.indexOf('y'));
9jshell> System.out.println(str1.indexOf('y', 2));
9jshell> System.out.println(str1.indexOf(str2));
9
  • int lastIndexOf(int ch): 找出ch字符在该字符串中最后一次出现的位置
  • int lastIndexOf(int ch, int fromIndex):找出ch字符在该字符串中从fromIndex开始后最后一次出现的位置
  • int lastIndexOf(String str):找出子字符串str在该字符串中最后一次出现的位置
  • int lastIndexOf(String str, int fromIndex):找出str子字符串在该字符串中从fromIndex开始后最后一次出现的位置
  • int length(): 返回当前字符串长度
  • String replace(char oldChar, char newChar):将字符串中第一个oldChar替换成newChar
  • boolean startsWith(String prefix): 该String对象是否以prefix开始
  • boolean startsWith(String prefix, int offset):该String对象从offset位置算起,是否以prefix开始
  • String substring(int beginIndex):获取从beginIndex位置开始到结束的子字符串
  • String substring(int beginIndex, int endIndex):获取从beginIndex位置开始到endIndex位置的子字符串
  • char[] toCharArray():将该String对象转换成char数组
  • String toLowerCase():将字符串转换成小写
  • String toUpperCase():将字符串转换成大写
  • static String valueOf(X x):一系列用于将基本类型值转换为String对象的方法

StringBuffer类和StringBuilder类

因为String类是不可变的,所以会额外产生很多临时变量使用StringBuffer和StringBuilder就可以避免这个问题;StringBuilder提供了一系列插入、追加、改变该字符串里包含的字符序列的方法,而StringBuffer与其用法完全相同,只是StringBuffer是线程安全的。

public class StringBuilderTest
{public static void main(String[] args){var sb = new StringBuilder();// 追加字符串sb.append("java");//sb = "java"// 插入sb.insert(0, "hello "); // sb="hello java"// 替换sb.replace(5, 6, ","); // sb="hello,java"// 删除sb.delete(5, 6); // sb="hellojava"System.out.println(sb);// 反转sb.reverse(); // sb="avajolleh"System.out.println(sb);System.out.println(sb.length()); // 输出9System.out.println(sb.capacity()); // 输出16// 改变StringBuilder的长度,将只保留前面部分sb.setLength(5); // sb="avajo"System.out.println(sb);}
}

Java面向对象系列[v1.0.1][String类相关用法]相关推荐

  1. Java面向对象系列[v1.0.0][类加载器]

    类加载器负责将.class文件加载到内存中,并为它生成对应的java.lang.Class对象 类加载机制 类加载器负责加载所有的类,并未所有被载入内存中的类生成一个java.lang.Class实例 ...

  2. Java面向对象系列[v1.0.0][泛型基础]

    Java5增加泛型支持,很大程度上是为了让集合记住其元素的数据类型,在此之前不用泛型的话,一旦把一个对象放进Java集合中,集合就会忘记对象的类型,把所有的对象当成Object类型处理,从集合里取出对 ...

  3. Java面向对象系列[v1.0.0][泛型进阶]

    所谓泛型,就是允许在定义类.接口.方法时使用类型形参,这个类型形参(或者叫泛型)将在声明变量.创建对象.调用方法时动态地指定(即传入实际的类型参数也可称为类型实参) Java5改写了集合框架中的全部接 ...

  4. Java面向对象系列[v1.0.0][SQL语法之DDL]

    SQL语法基础 SQL全称是Structured Query Language也就是结构化查询语言,它是操作和检索关系数据库的标准语言,标准的SQL语句可以用于操作任何关系数据库,标准的SQL语句通常 ...

  5. Java面向对象系列[v1.0.0][SQL语法之数据库约束]

    数据库约束 所有关系型数据库都支持对数据表使用约束,在表面上是强制执行的数据校验规则,通过约束可以更好的的保证数据表里数据的完整性 大部分数据库支持5中完整性约束 NOT NULL:非空约束,指定某列 ...

  6. Java自动化测试系列[v1.0.0][TestNG测试开发环境配置]

    基于之前写的一篇文章Java自动化测试系列[v1.0.0][Maven开发环境]的基础上,阐述如何配置单元测试框架TestNG的测试开发环境 创建Maven项目 启动IDEA,点击Create New ...

  7. Java自动化测试系列[v1.0.0][ZTestReport测试报告]

    获取报告框架 ZTestReport 源码Clone地址为ZTestReport ,其中ZTestReport.java和其template是我们需要的关键 修改报告框架 根据我的需要,在源码基础上进 ...

  8. java字符串常量池长度_Java String类相关知识梳理(含字符串常量池(String Pool)知识)...

    目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...

  9. Java自动化测试系列[v1.0.0][自动化测试框架理念]

    自动化测试含义 在自动化测试领域内流传着一个说法:单元测试才是自动化测试的核心,在自动化测试里,无论框架何等完美都不可能脱离单元测试,单元测试将会是自动化测试里最小的单位,把它看作单位一,若干个单位一 ...

  10. Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩

    Java面向对象编程入门练习:Manager类继承Employee类并实现求得员工平均业绩 请定义一个Manager类,该类继承Employee类,并定义两个变量及一个构造方法,两个变量:depart ...

最新文章

  1. IOS时间传递机制简记
  2. mysql忘记密码,如何重置密码
  3. Redis学习笔记——初级
  4. Ubuntu Server 命令行下的默认语言 中文乱码
  5. python和java和scala_有没有与python3相当的scala/java收藏。国家
  6. [SOSP 17] Wukong+S : 不断演化的RDF数据的亚毫秒级别的状态流查询
  7. 科大星云诗社动态20210313
  8. Dijkstra 最短路径算法详解 无向图
  9. h5策划书_一个好的H5营销活动设计要如何进行策划
  10. 多人博客php源码,wusx php多用户博客(基础thinkphp)
  11. pageContext对象、JSP标签
  12. 设置模糊阴影_制作带模糊效果的PPT首页
  13. MAC终端使用SSH连接远程服务器
  14. 实验室纳新语音文字记录
  15. protel99se进阶视频教程(手把手教你画51单片机开发板)
  16. Zipf,Power-laws,Pareto分布
  17. mysql中哪一个储存逻辑型_《VisualFoxPro》2018秋华东年季学期在线作业(一)二三...
  18. 开箱即用的Vue 框架
  19. 【C语言详解】——文件操作(建议收藏)
  20. NOIP CSP-J/S初赛知识

热门文章

  1. 定时任务调度框架Quartz--Misfire处理规则
  2. 计算机自带游戏怎么调,今天才知道,原来电脑上自带游戏模式,开启后瞬间提升流畅度...
  3. starccm实例教程_STAR CCM实例教程1
  4. A星寻路算法(A* Search Algorithm),转载,见过最好的文章
  5. sdut3345+2127 哈夫曼树
  6. Burpsuite神器常用功能使用方法总结(附burpsuite2022.2.4下载地址)
  7. 图像处理工具包ImagXpress的清理图像功能简介
  8. 基于java的ssm框架健身房管理系统
  9. window10 pro下载
  10. 如何借助一款商业模式,开拓茶叶营销新渠道—代言人合伙人模式