此篇博客主要整理Java中的String类的使用。

  一、String

    1.1  String 的定义

  

  

  上图是jdk中对String类的定义,得到的信息有:

  ①、String类声明为final的,不可被继承。

  ②、String类实现了Serializable接口,表示字符串是支持序列化的(IO流中使用)。

                    实现了Comparable接口,表示String是可以比较大小的。

  ③、String内部定义了final char[ ] value 有用于存储字符串数据。

  ④、String 代表了不可变的字符序列,简称:不可变性。

体现: a.对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。

b.当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。

c.当调用String的replace() 方法进行修改指定字符串时,也需要重新指定内存区域。

  ⑤、通过字面量的方式(区别于new)给一个字符串进行赋值,此时的字符串声明在字符串常量池中。

  ⑥、字符串常量池中是不会存储相同内容的字符串的。(体现:定义两个值相同的字符串变量,用“==”判断,返回true

  1.2  String 实例化的方式

   

    

    

    说明:使用字面量定义的方式都存储到常量池中, 常量池中不存储重复的内容,所以s1和s2指向的地址是同一个。

使用new + 构造器的方式,是数据在堆空间中开辟新空间s3 和s4的地址值不同。

    

    小练习:

      

    说明:因为s4被定义为final ,即定义为常量。s1在常量池,s5 也在常量池,地址相同,==为true

 

  1.3 String 的常用方法

  1.   int   length()  :  返回字符串长度  return value.length。
  2.   char  charAt ( int index)  :  返回某处索引的字符  return value[index]。
  3.   boolean  isEmpty( )  :   判断是否为空字符串  return value.length == 0。
  4.   String  toLowerCase( )  :  使用默认语言环境,将 String 中的所有字符转换为小写。
  5.   String  toUpperCase( )  :  使用默认语言环境, 将 String 中的所有字符转换成大写。
  6.   String  trim( )  :  返回字符串的副本, 忽略前导空白和尾部空白。
  7.   boolean  equals( Object  obj )  :  比较两个字符串的内容是否相同。
  8. boolean  equalsIgnoreCase( String anotherString )  :  与equals 方法类似,忽略大小写。
  9. String  concat( String  str )  :  指定字符串连接到此字符串的尾部, 等价与使用 “+”。
  10. int  compareTo( String anotherString )  :  比较两个字符串大小。
  11. String  substring( int beginIndex )  :  返回一个新的字符串,它是此字符串的从beginIndex开始截取的字符串。
  12. String  substring( int beginIndex ,   int  endIndex )  : 返回一个新的字符串,从beginIndex开始截取,从endIndex(不含)结尾。
  13. boolean  endsWith( String  suffix)  :  测试此字符串是否以指定的后缀结束。
  14. boolean  startWith( String  prefix)  :  测试此字符串是否以指定的前缀开始。
  15. boolean  startWith( String prefix,  int  toffset )  :  测试此字符串从指定索引开始的子字符串是否以指定前缀 开始。
  16. boolean  contains(CharSequence  s)  :  当且仅当此字符串包含指定的char 值序列时,返回true。
  17. int  indexOf( String str)  :  返回指定字符串在此字符串中第一次出现处的索引。找不到返回 -1。
  18. int  indexOf( String  str,  int  fromIndex)  :  返回指定字符串在此字符串中第一次出现的索引,从指定的索引开始。
  19. int  lastIndexOf( String str, int fromIndex)   :  返回指定字符串在此字符中最右边出现的索引。找不到返回 -1。
  20. int  lastIndexOf( String str,  int  fromIndex)   :  返回指定字符串在此字符串中最后一次出现处的索引, 从指定的索引开始反向搜索。
  21. String  replace( char  oldChar,  char  newChar)  :  返回一个新的字符串,它是通过用newChar 替换此字符串中出现的所有oldChar得到。
  22. String  replace( CharSequence target,  CharSequence  raplacement)  :  使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
  23. String  replaceAll( String  regex,  String  replacement)  :  使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。
  24. String  replaceFist( String  regex, String  replacement)  :  使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串。
  25. boolean  matches( String  regex)  :  告知此字符串是否匹配给定的正则表达式。
  26. String[ ]  split( String  regex)  :  根据给定正则表达式是否匹配拆分此字符串。
  27. String[ ]  split( String  regex,  int  limit)  : 根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部放到最后一个元素中。     

  1.4、String 与其他结构之间的转换

  1. 字符串  --> 基本的数据类型、包装类

    方法:调用包装类的静态方法: parse×××(str)

    Integer包装类的public static int parseInt( String s): 可以将有“数字”字符组成的字符串转换成整型

    例子:String  str  =  "123";

       int  num = (int) str ;  //强转是错误的,子父类关系才能强转

       int  num  = Integer.parseInt(str1);

  2. 基本数据类型、包装类  --> 字符串

    方法:调用String  重载的valueOf(×××)

    例子: String  str2 = String.valueOf(num);   / /"123"

或者更简便的方法: String str3 = num + "" ; / /  "123"

  

  1.5 String 与字符数组之间的转换

  1. String -->  char[ ]

    方法:调用String 的 toCharArray( )

    例子:String str1 = "abc123";

char[ ]  charArray = str1.toCharArray( );

  2. char[ ]  -->  String

    方法:调用String 的构造器

    例子:char[ ]  arr = new char[ ] {'h', 'e', 'l', 'l', 'o'};

                         String str2 = new  String(arr);

  

  1.6 String 与 字节数组之间的转换

  1. String  --> byte[ ]

    方法:调用 String 的getBytes( )

    例子:String  str1 = "abc123中国";

byte[ ]  bytes = str1.getBytes( ); //构造器可以空参就是默认,可以带参“gbk”编码等

System.out.println(Arrays.toString(bytes)); // [97, 98, 99, 49, 50, -28, -72, -83, -27, -101, -67]

说明: 使用默认集编进行转换,英文、数字是ascii码, 汉字编译器默认utf-8,一个汉字三个字节

  2. byte[ ]  -->  String

    方法:调用String的构造器

    例子: String str2 = new String(bytes);

//如果不是默认编码,使用 String str3 = new String(bytes, "gbk");  //gbk只是一种编码方式

  

  1.7  StringBuffer类与Stringbuilder类

    String、StringBuffer、StringBulider三者的异同?

    String: 不可变的字符序列,底层使用 char[ ] 存储

    StringBuffer: 可变的字符序列,线程安全的,效率低, 底层使用char[ ]存储

    StringBuilder: 可变的字符序列,线程不安全,效率高, 底层使用char[ ]存储(不涉及多线程多使用此类)

    说明:String不可变因为底层的char[ ] 长度就是字符串的长度。

StringBuffer与StringBuilder底层使用char[16]数组,使用完扩容为原来的2倍+2。

    常用方法:

    append(×××):用于字符串的拼接

    delete( int start, int end) : 删除指定位置的内容

    replace( int start, int end, String str)  :  把[start, end) 位置替换为str

    insert( int offset, ×××)  :  在指定位置插入×××

    reverse(): 把当前字符序列逆转

    int  indexOf(String str)  :  返回子一个字串出现的位置

    String  substring(int start, int end)  :  返回一个从start开始 end索引结束的左闭右开的区间

    int  length( ) :长度

    char charAt( int n )  :   返回指定位置的字符

    void  setCharAt(int n,  char  ch)  :  将指定字符位置改成新的

    

    总结:

    增:append(×××)

    删:delete( int start, int end)

    改:setCharAt( int n,  char  ch)  /  replace(int  start,  int  end,  String  str)

    查:charAt( int n)

    长度:length()

    遍历:for( ) + charAt( )  /  toString( )

    

    

[Java基础]——String类的更多相关文章

  1. Java基础String类

    String是一个对象 String不属于8种基本数据类型(byte, char, short, int, float, long, double, boolean),String是对象,所以其默认值 ...

  2. Java基础—String类小结

    一.String类是什么 public final class String implements java.io.Serializable, Comparable<String>, Ch ...

  3. Java基础——String类(二)

    今天做了几道String常见操作.先来几个代码实例: 例一:此方法,仅把字符串前后出现的空格去掉了,中间部分不会. class TestTrim { public static void main(S ...

  4. Java基础——String类(一)

    一.String 类代表字符串 Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串 ...

  5. Java基础:String类详解,案例用户登录实现,案例手机号截取实现,案例敏感词替换实现;StringBuilder类详解,StringBuilder和String相互转换,附练习案例.

    1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...

  6. Java基础---String类和基本数据类型包装类

    第一讲     String类 一.概述         String是字符串的类类型,用于描述字符串事物.字符串是一个特殊的对象.特殊之处就在于: Stings= new String();和Str ...

  7. java基础-BigDecimal类常用方法介绍

    java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...

  8. java基础-BigInteger类常用方法介绍

    java基础-BigInteger类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigInteger类概述 Java中long型为最大整数类型,对于超过long ...

  9. java基础-Arrays类常用方法介绍

    java基础-Arrays类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Array类的概念 此类包含用来操作数组(比如排序和搜索)的各种方法.需要注意,如果指定 ...

随机推荐

  1. 项目测试环境自动化部署[jenkins前后端配置、Nginx配置]

    持续部署:关注点在于项目功能部署到服务器后可以正常运行,为下一步测试环节或最终用户正式使用做准备.(问题点:一个环节有问题,其他环节跟着有问题) 持续集成:关注点是在于尽早发现项目整体运行问题,尽早解 ...

  2. Springboot集成xxl-Job

    一.前言 xxl-job一个轻量级的分布的调度中间件,详情介绍自己到官网看:https://www.xuxueli.com/xxl-job/ 二.客户端(执行器) 引入依赖compile group: ...

  3. 如何设置10px

    chrome浏览器小于12px字体默认显示12px? font-size:10px: -webkit-transform:scal(0.83):

  4. 最近有安装了一次hadoop集群,NameNode启动失败,及原因

    最近有安装了一次hadoop集群,NameNode启动失败,查看日志,找到以下原因: 遇到的异常1: org.apache.hadoop.hdfs.server.common.Inconsistent ...

  5. Robot Framework+adb框架自动化测试Android设备案例⑷——L2层关键字

    一.EMMC测试套件 L2层关键字.robot *** Settings *** Resource ../L3公共层.robot *** Keywords *** 一般录影文件列表(EMMC) ${f ...

  6. Git:git常用命令

    1.版本控制工具     一个可以管理和追踪软件代码的工具.     分类:       集中式版本控制工具:SVN       分布式版本控制工具:Git 2.Git 的概念:     工作区:就是 ...

  7. Java经典小游戏——贪吃蛇简单实现(附源码)

    一.使用知识 Jframe GUI 双向链表 线程 二.使用工具 IntelliJ IDEA jdk 1.8 三.开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...

  8. SpringBoot如何利用Actuator来监控应用?

    目录 Actuator是什么? 快速开始 引入依赖 yml与自动配置 主程序类 测试 Endpoints 官方列举的所有端点列表 启动端点 暴露端点 配置端点 发现页面 跨域支持 实现一个定义的端点 ...

  9. docker 批量删除已经停止的容器

    长期操作导致大量的容器堆积,如何对这些没有用的容器进行批量删除: 命令如下 : Docker rm `docker ps -a |awk '{print $1}' | grep [0-9a-z]`

  10. js 乘除算法 浮点 精度解决办法

    js中进行浮点数运算时容易出现精度问题 1) 除法函数 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精确的除法结果. //调用:accDiv(a ...