字符串的基本操作

简介: String类的概述String类的构造方法String类的判断功能String类的获取功能String类的转换功能String其他类型互转汇总其它类型转成String类型String类型转成其它类型StringStringBuffer与Stri...

String类的概述

  JDK提供的API,查看String类的说明可以看到下面两句话

  字符串字面值”abc”也可以看成是一个字符串对象。
  字符串是常量,一旦被赋值,就不能被改变。

String类的构造方法

方法 说明
public String() 空构造
public String(byte[] bytes) 把字节数组转成字符串
public String(byte[] bytes,int index,int length) 把字节数组的一部分转成字符串
public String(char[] value) 把字符数组转成字符串
public String(char[] value,int index,int count) 把字符数组的一部分转成字符串
public String(String original) 把字符串常量值转成字符串

String类的判断功能

方法 说明
boolean equals(Object obj) 比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str) 比较字符串的内容是否相同,忽略大小写
boolean contains(String str) 判断大字符串中是否包含小字符串
boolean startsWith(String str) 判断字符串是否以某个指定的字符串开头
boolean endsWith(String str) 判断字符串是否以某个指定的字符串结尾
boolean isEmpty() 判断字符串是否为空。

String类的获取功能

方法 说明
int length() 获取字符串的长度。
char charAt(int index) 获取指定索引位置的字符
int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。
int indexOf(String str) 返回指定字符串在此字符串中第一次出现处的索引。
int indexOf(int ch,int fromIndex) 返回指定字符在此字符串中从指定位置后第一次出现处的索引。
int indexOf(String str,int fromIndex) 返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
String substring(int start) 从指定位置开始截取字符串,默认到末尾。
String substring(int start,int end) 从指定位置开始到指定位置结束截取字符串。

String类的转换功能

方法 说明
byte[] getBytes() 把字符串转换为字节数组。
char[] toCharArray() 把字符串转换为字符数组。
static String valueOf(char[] chs) 把字符数组转成字符串。
static String valueOf(int i) 把int类型的数据转成字符串。
注意:String类的valueOf方法可以把任意类型的数据转成字符串
String toLowerCase() 把字符串转成小写。(了解)
String toUpperCase() 把字符串转成大写。
String concat(String str) 把字符串拼接。

String其他类型互转汇总

其它类型转成String类型

  • toString()

    • Object类中有public方法toString(),java对象都可以调用。注意:必须保证类对象不能为null值,否则抛出NullPointerException异常,派生类中一般覆盖此方法。
  • (String)

    • 强制类型转换,需要保证能够转成String,前面使用instanceof进行检查,否则抛出CalssCastException异常。注意:语法检查时不会报错,用时一定要小心。
  • valueOf(基本类型 i)

    • 与第一种类似,只是前者不能为null,后者可以为null。
  • “”+

    • 效率上toString()>String.valueOf>i+””

String类型转成其它类型

  • valueOf(String str)

    • 可以把任意类型的数据转成字符串
  • parseLong(String str)和parseInt(String str)

    • 注:基本类型数据级别(byte/short/char)->int->long->float->double
      低级别向高级别自动转换;高级别向低级别强制转换会导致溢出或丢失精度

附:基本类型与包装类类型转换
正向:Integeri=new Integer(100);

反向:int b=i.intValue();

特殊:int i=Integer.parseInt(“1234”);//可以通过

   floatf=Float.valueOf(“1234”).floatValue();

   charc=Character.valueOf(“1233”).charValue();

String、StringBuffer与StringBuilder之间区别

StringBuffer常用方法(StringBuilder的省略)

(由于StringBuffer和StringBuilder在使用上几乎一样,所以只写一个)

构造方法

方法 说明
publicStringBuffer() 初始化出的StringBuffer对象是一个空的对象
publicStringBuffer(int capacity) 分配了长度为capacity字节的字符缓冲区
publicStringBuffer(String str) 创建带有内容的StringBuffer对象

例子
 StringBuffer s = new StringBuffer();
   这样初始化出的StringBuffer对象是一个空的对象

 StringBuffer sb1=new StringBuffer(512);
   分配了长度512字节的字符缓冲区。

 StringBuffer sb2=new StringBuffer(“how are you?”)
  创建带有内容的StringBuffer对象,在字符缓冲区中存放字符串“how are you?”

常用方法

方法 说明
StringBuffer append(boolean b) 表示将括号里的某种数据类型的变量插入某一序列中
charAt( ) 返回此序列中指定索引处的 char 值
getChars(int start,int end,char chars[],int charStart) 将字符串的子字符串复制给数组
int length() 返回长度(字符数)。
toString( ) 返回此序列中数据的字符串表示形式。
subString( ) 返回一个新的 String,它包含此序列当前所包含的字符子序列。
StringBuffer delete(int start,int end) 删除指定区间以内的所有字符,包含start,不包含end索引值的区间。
StringBuffer deleteCharAt(int index) 删除指定位置的字符,然后将剩余的内容形成新的字符串
StringBuffer insert(int offset, Object obj) 该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。
StringBuffer reverse() 将StringBuffer对象中的内容反转,然后形成新的字符串
void setCharAt(int index, char ch) 修改对象中索引值为index位置的字符为新的字符ch
void trimToSize() 将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费,和String的trim()是一样的作用。

执行速度比较

对字符串操作三者在执行速度方面的比较

  StringBuilder > StringBuffer > String

  String <(StringBuffer,StringBuilder)的原因

    String:字符串常量

    StringBuffer:字符创变量

    StringBuilder:字符创变量

    从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。

String s = "abcd";
s = s+1;
System.out.print(s);// result : abcd1

 JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来;执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。

 而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。

StringBuilder与 StringBuffer

  StringBuilder:线程非安全的

  StringBuffer:线程安全的

  当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

相关文章
|
Oracle Java 关系型数据库
idea配置jdk、淘宝镜像
idea配置jdk、淘宝镜像
1045 0
idea配置jdk、淘宝镜像
|
Java Maven 数据安全/隐私保护
Maven - 发布JAR包到Maven远程中央仓库(五)
Maven - 发布JAR包到Maven远程中央仓库(五)
1154 0
Maven - 发布JAR包到Maven远程中央仓库(五)
|
算法 Java C++
branch and price求解VRPTW问题代码详解
branch and price求解VRPTW问题代码详解
844 0
branch and price求解VRPTW问题代码详解
|
NoSQL 关系型数据库 API
内部系统开发原来可以这么爽!5款低代码平台推荐
这里码匠为您推荐 5 款海外目前流行的内部系统低代码平台并进行评测,为您在企业低代码平台的选择上助一臂之力。
1721 0
内部系统开发原来可以这么爽!5款低代码平台推荐
|
存储 SQL JSON
实时数仓Hologres新功能介绍
产品新品发布会 ——丁烨(昆吾) 阿里云产品专家
实时数仓Hologres新功能介绍
|
存储 Cloud Native 容器
Longhorn,企业级云原生容器分布式存储 - 定制部署默认设置
Longhorn,企业级云原生容器分布式存储 - 定制部署默认设置
589 0
|
存储 安全 搜索推荐
码上公益低代码开发训练营 — 课时1:《低代码开发师初级认证课程》1-2章 初识钉钉宜搭低代码
随着企业数字化转型进程的加快,业务上线的时间要求也越来越短,若要提高业务应用系统的开发效率,传统的开发模式必然向更加敏捷而高效的开发模式转变。低代码的开发方式能够加速业务敏捷创新,实现业务应用的快速交付,并且让没有技术背景的企业业务人员也能够基于低代码平台快速搭建业务系统。本章将从认识低代码和低代码平台开始,学习低代码开发师系列课程。
码上公益低代码开发训练营 — 课时1:《低代码开发师初级认证课程》1-2章 初识钉钉宜搭低代码
|
自然语言处理 视频直播 人机交互
阿里云智能语音交互中实时识别服务的简单使用
智能语音交互产品基于语音识别、语音合成、自然语言理解等技术,实现“能听、会说、懂你”式的智能人机交互体验,适用于智能客服、质检、会议纪要、实时字幕等多个企业应用场景,实时识别服务对长时间的语音数据流进行识别,适用于会议演讲、视频直播等长时间不间断识别的场景,此篇文章将介绍此服务的简单使用
1662 0
阿里云智能语音交互中实时识别服务的简单使用
|
Android开发
Android TV 焦点控制
Android TV 焦点控制
740 0
|
存储 JSON 分布式计算
年度报告|Hologres重点功能年终大盘点
本文将会从多个角度总结Hologres的重点功能,以帮助用户更加了解和使用Hologres。
2313 0
年度报告|Hologres重点功能年终大盘点