此篇博客主要整理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类

1、 String、StringBuffer、StringBulider三者的异同?

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

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

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

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

StringBuffer与StringBuilder底层使用char[16]数组,使用完扩容为原来的2倍+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 RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇

    本系列主要是使用Java RMI 实现一个简单的GFS(谷歌文件系统,google file system)。首先进行整体介绍,然后对背景进行描述以及对系统进行设计,同时实现系统,提供演示视频和源代码,望多多支持!本系列主要是使用Java RMI实现一个简单的GFS(谷歌文件系统,google fi......

  2. 讲讲Java8的Optional类

    前言Java 8中引入了 Optional 类来解决 NullPointerException 与繁琐的 null 检查,该类首次出现在 Guava。Java 8 才成为类库中的一部分。入门Optional 是一个封装值的类,用于保存类型为 T 的值;本质上,Optional 就是一个容器。举例来说......

  3. Java面向对象总结性项目 之 图书馆管理代码

    Java面向对象总结性项目 之 图书馆管理代码 简介 核心需求 类的设计 架构 创建图书相关的类 创建......

  4. Java高并发BlockingQueue重要的实现类详解

    ArrayBlockingQueue有界的阻塞队列,内部是一个数组,有边界的意思是:容量是有限的,必须进行初始化,指定它的容量大小,以先进先出的方式存储数据,最新插入的在对尾,最先移除的对象在头部。public class ArrayBlockingQueue extends AbstractQue......

  5. java DelayQueue的原理浅析

    在对DelayQueue延迟功能的使用上,很多人不能后完全理解延迟的一些功能使用,这里我们深入来挖掘一下DelayQueue的原理。下面将从构造方法、接口、继承体系三个方面进行分析,需要注意的是,相较于其它的阻塞队列,DelayQueue因为延迟的功能多了接口的使用,一起来看具体内容。1.构造方法p......

  6. Java 容器系列总结

    为什么要使用集合当我们需要保存一组类型相同的数据的时候,我们应该是用一个容器来保存,这个容器就是数组,但是,使用数组存储对象具有一定的弊端, 因为我们在实际开发中,存储的数据的类型是多种多样的,于是,就出现了“集合”,集合同样也是用来存储多个数据的。数组的缺点是一旦声明之后,长度就不可变了;同时,声......

  7. Java异常处理场景中不同位置的返回值详细解析

    Java 异常处理中的返回值在不同位置不同场景下是有一些差别的,这里需要格外注意具体分以下两种场景:1 finally语句块没有return语句,即当代码执行到try或者catch语句块中的return语句时,相当于在本地保存了一份此时返回值的变量的值副本,然后按照try catch finally......

  8. Shiro中Subject对象的创建与绑定流程分析

    我们在平常使用Shrio进行身份认证时,经常通过获取Subject 对象中保存的Session、Principal等信息,来获取认证用户的信息,也就是说Shiro会把认证后的用户信息保存在Subject 中供程序使用public static Subject getSubject(){ return......

  9. java 最新Xss攻击与防护(全方位360°详解)

    前沿XSS防范属于前端还是后端的责任 ?XSS 防范是后端 RD(研发人员)的责任,后端 RD 应该在所有用户提交数据的接口,对敏感字符进行转义,才能进行下一步操作。所有要插入到页面上的数据,都要通过一个敏感字符过滤函数的转义,过滤掉通用的敏感字符后,就可以插入到页面中。公司的搜索页面如果你是下面的......

  10. java Random.nextInt()方法

    转:java Random.nextInt()方法lic int nextInt(int n)该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。直接上代码:package org.xiaowu.random.demo; import j......

随机推荐

  1. C#中DataGridView导出Excel的两种方法

    第一种是用数据流导出:#regionSaveFileDialog saveFileDialog = new SaveFileDialog();saveFileDialog.Filter = "Execl files (*.xls)|*.xls";saveFileDialog.Fi......

  2. Vue3(三)CND + ES6的import + 工程化的目录结构

    突发奇想这几天整理了一下vue的几种使用方式,对比之后发现有很多相似之处,那么是不是可以混合使用呢?比如这样:vue的全家桶和UI库,采用传统的方式加载(CND、script)。自己写的js代码,采用ES6的 import 方式加载。目录结构采用vuecli建立的项目的目录结构。入口页面用vite项......

  3. std::async的使用总结

    C++98标准中并没有线程库的存在,直到C++11中才终于提供了多线程的标准库,提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。多线程库对应的头文件是#include ,类名为std::thread。然而线程毕竟是比较贴近系统的东西,使用起来仍然不是很方便,特别是线程同步及获取线程运行结......

  4. PHP实现爬虫爬取图片代码实例

    文字信息我们尝试获取表的信息,这里,我们就用某校的课表来代替: 接下来我们就上代码:a.php<?php header( "Content-type:text/html;Charset=utf-8" );$ch = curl_init()......

  5. Vue实现一种简单的无限循环滚动动画的示例

    本文主要介绍了Vue实现一种简单的无限循环滚动动画的示例,分享给大家,具体如下:先看实现效果:这种类似轮播的效果,通常可以使用轮播的方案解决,只不过相对于我要分享的方案来说,轮播实现还是要复杂些的。Vue提供了一种过渡动画transition-group,这里我便是利用的这个效果// templat......

  6. Vue 实现可视化拖拽页面编辑器

    在线地址 (用梯子会更快些)可视化页面编辑器,听起来可望不可即是吧,先来张动图观摩观摩一番!实现这功能之前,在网上参考了很多资料,最终一无所获,五花八门的文章,都在述说着曾经的自己!那么,这时候就需要自己去琢磨了,如何实现?需要考虑到:拖拽的实现数据结构的定义组件的划分可维护性、扩展性对象的引用:在......

  7. Java 添加数字签名到Excel以及检测、删除签名

    Excel中可添加数字签名以供文档所有者申明文档的所有权或有效性。文本以Java代码示例介绍如何在Excel文档中对数字签名功能进行相关操作,包括如何添加签名到Excel、检测Excel文档是否已签名,以及如何删除Excel文档中的签名。本次代码测试环境Excel版本:2013编译环境:Intell......

  8. js实现简单商品筛选功能

    本文实例为大家分享了js实现商品筛选功能的具体代码,供大家参考,具体内容如下应用场景:商品筛选Document* {margin: 0;padding: 0;list-style: none;text-decoration: none;}.choose {width: 500px;height: a......

  9. python中altair可视化库实例用法

    作为六大python可视化库,基本上学会都是可以通吃任何领域的存在,本章要给大家介绍的Altair就是其中之一的可视化库,能够将数据转化为非常直观的图片,让我们更加清晰的认知数据之前直观的联系,俨然已经成为可视化库中的新星,好啦,下面就让我们详细了解下这个荣获众多粉丝的可视化库的使用技巧吧。安装Al......

  10. python工具系列-弱口令工具

    python弱口令扫描工具-初始版本篇博客记录下基于python写的gui小工具,也是我学python以来自己动手写的第一款交互型的工具Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter可以在大多数的 Unix 平台下......