[Java基础]——String类
此篇博客主要整理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 的常用方法
- int length() : 返回字符串长度 return value.length。
- char charAt ( int index) : 返回某处索引的字符 return value[index]。
- boolean isEmpty( ) : 判断是否为空字符串 return value.length == 0。
- String toLowerCase( ) : 使用默认语言环境,将 String 中的所有字符转换为小写。
- String toUpperCase( ) : 使用默认语言环境, 将 String 中的所有字符转换成大写。
- String trim( ) : 返回字符串的副本, 忽略前导空白和尾部空白。
- boolean equals( Object obj ) : 比较两个字符串的内容是否相同。
- boolean equalsIgnoreCase( String anotherString ) : 与equals 方法类似,忽略大小写。
- String concat( String str ) : 指定字符串连接到此字符串的尾部, 等价与使用 “+”。
- int compareTo( String anotherString ) : 比较两个字符串大小。
- String substring( int beginIndex ) : 返回一个新的字符串,它是此字符串的从beginIndex开始截取的字符串。
- String substring( int beginIndex , int endIndex ) : 返回一个新的字符串,从beginIndex开始截取,从endIndex(不含)结尾。
- boolean endsWith( String suffix) : 测试此字符串是否以指定的后缀结束。
- boolean startWith( String prefix) : 测试此字符串是否以指定的前缀开始。
- boolean startWith( String prefix, int toffset ) : 测试此字符串从指定索引开始的子字符串是否以指定前缀 开始。
- boolean contains(CharSequence s) : 当且仅当此字符串包含指定的char 值序列时,返回true。
- int indexOf( String str) : 返回指定字符串在此字符串中第一次出现处的索引。找不到返回 -1。
- int indexOf( String str, int fromIndex) : 返回指定字符串在此字符串中第一次出现的索引,从指定的索引开始。
- int lastIndexOf( String str, int fromIndex) : 返回指定字符串在此字符中最右边出现的索引。找不到返回 -1。
- int lastIndexOf( String str, int fromIndex) : 返回指定字符串在此字符串中最后一次出现处的索引, 从指定的索引开始反向搜索。
- String replace( char oldChar, char newChar) : 返回一个新的字符串,它是通过用newChar 替换此字符串中出现的所有oldChar得到。
- String replace( CharSequence target, CharSequence raplacement) : 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
- String replaceAll( String regex, String replacement) : 使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。
- String replaceFist( String regex, String replacement) : 使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串。
- boolean matches( String regex) : 告知此字符串是否匹配给定的正则表达式。
- String[ ] split( String regex) : 根据给定正则表达式是否匹配拆分此字符串。
- 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类的更多相关文章
- Java基础String类
String是一个对象 String不属于8种基本数据类型(byte, char, short, int, float, long, double, boolean),String是对象,所以其默认值 ...
- Java基础—String类小结
一.String类是什么 public final class String implements java.io.Serializable, Comparable<String>, Ch ...
- Java基础——String类(二)
今天做了几道String常见操作.先来几个代码实例: 例一:此方法,仅把字符串前后出现的空格去掉了,中间部分不会. class TestTrim { public static void main(S ...
- Java基础——String类(一)
一.String 类代表字符串 Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串 ...
- Java基础:String类详解,案例用户登录实现,案例手机号截取实现,案例敏感词替换实现;StringBuilder类详解,StringBuilder和String相互转换,附练习案例.
1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...
- Java基础---String类和基本数据类型包装类
第一讲 String类 一.概述 String是字符串的类类型,用于描述字符串事物.字符串是一个特殊的对象.特殊之处就在于: Stings= new String();和Str ...
- java基础-BigDecimal类常用方法介绍
java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...
- java基础-BigInteger类常用方法介绍
java基础-BigInteger类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigInteger类概述 Java中long型为最大整数类型,对于超过long ...
- java基础-Arrays类常用方法介绍
java基础-Arrays类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Array类的概念 此类包含用来操作数组(比如排序和搜索)的各种方法.需要注意,如果指定 ...
随机推荐
- CSS基础-Flexbox
flexbox 是一种一维的布局模型,它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力. 说 flexbox 是一种一维的布局,是因为一个 flexbox 一次只能处理一个维度上的元素 ...
- 【题解】P2610 [ZJOI2012]旅游
link 题意 T国的国土可以用一个凸N边形来表示,包含 \(N-2\) 个城市,每个城市都是顶点为 \(N\) 边形顶点的三角形,两人的旅游路线可以看做是连接N个顶点中不相邻两点的线段.问一路能经过 ...
- 题解-FJOI2018 领导集团问题
题面 FJOI2018 领导集团问题 给一棵树 \(T(|T|=n)\),每个点有个权值 \(w_i\),从中选出一个子点集 \(P=\{x\in {\rm node}|x\in T\}\),使得 \ ...
- Java并发编程的艺术(九)——闭锁、同步屏障和信号量
闭锁:CountDownLatch 使用场景 当前线程需要等待若干条线程执行完毕后,才能继续执行的情况. 也可以是若干个步骤执行完毕后的情况. 使用方法 初始化闭锁的时候,填入计数值,然后等待其他线程 ...
- 抖音视频背景音乐提取工具v1.0
使用方法:id就是你点那个音乐分享,复制链接,然后链接有个ID(userid=后面数字就是id),就是那个,输入ID之后得到链接,浏览器新建下载,复制你得到的链接就行了(结果空白多解析几次就行了)
- Linux下keepalived配置
1.背景 节点1:192.168.12.35 节点2:192.168.12.36 2.keepalived安装 使用yum仓库安装keepalived [root@node01 ~]# yum ins ...
- MySQL锁(一)全局锁:如何做全库的逻辑备份?
数据库锁设计的初衷是处理并发问题,这也是数据库与文件系统的最大区别. 根据加锁的范围,MySQL里大致可以分为三种锁:全局锁.表锁和行锁.接下来我们会分三讲来介绍这三种锁,今天要讲的是全局锁. 全局锁 ...
- pip下载超时问题详解
前言 pip下载的安装包都是在国外的pipy服务器上面,又因国内某种墙的策略,导致速度非常的慢,甚至无法访问. 于是国内很多的企业和爱好者纷纷搭建自己的服务器,定时从pypi上拉起所有的镜像文件.然后 ...
- C#中的深度学习(三):理解神经网络结构
在这篇文章中,我们将回顾监督机器学习的基础知识,以及训练和验证阶段包括哪些内容. 在这里,我们将为不了解AI的读者介绍机器学习(ML)的基础知识,并且我们将描述在监督机器学习模型中的训练和验证步骤. ...
- Java JVM——5.Java虚拟机栈
虚拟机栈概述 由于跨平台性的设计,Java 的指令都是根据栈来设计的.不同平台CPU架构不同,所以不能设计为基于寄存器的. 栈实现的优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功 ...