当前位置: 首页 > news >正文

Java——API基础(String类和StringBuilder类)

一、API概述

API:应用程序编程接口(是一些包含了属性和方法的类)

Java API:指的就是JDK中提供各种功能的Java类

二、String类(在lang包下,不需要导包)

(一)概述

1.Java程序中,所有的双引号字符串,都是String这个类的对象

2.字符串是常量,它们的值在创建之后不能更改(平时对已有初始值的变量重新赋值,起的是替换的作用,而并非是修改)

3.String这个类在打印其对象名的时候,不会出现内存地址,而是该对象所记录的真实内容(与继承和Object类有关) 

(二)String常见构造方法

1.public String()——创建一个空白字符串对象,不含有任何内容

public class text2 {public static void main(String[] args) {String s1 = new String();System.out.println(s1);}
}
//结果
//

2.public String(char[] chs)——根据字符数组的内容,来创建字符串对象

public class text2 {public static void main(String[] args) {char[] chs = {'a','b','c'};String s1 = new String(chs);System.out.println(s1);}
}
//结果
//abc

3.public String(String original)——根据传入的字符串内容,来创建字符串对象

public class text2 {public static void main(String[] args) {String s1 = new String("abei2");System.out.println(s1);}
}
//结果
//abei2

4.String s = "abc" ;——直接赋值的方式创建字符串对象,内容就是abc

(三)创建字符串对象的区别对比

1.以""方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串常量池中维护

!!!字符串常量池:当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在(不存在——创建;存在——不会重新创建,而是直接复用{即地址一样})

public class text2 {public static void main(String[] args) {String a = "aaa";String b = "aaa";System.out.println(a==b);}
}
//结果
//true

 2.通过new创建的字符串对象,每一次new都会在堆内存申请一个内存空间,虽然内容相同,但是地址值不同

public class text2 {public static void main(String[] args) {char[] chs = {'a','b','c'};String a = new String(chs);String b = new String(chs);System.out.println(a==b);}
}
//结果
//false

(三)字符串拼接对比

1. 当变量与直接用引号生成的字符串拼接时

public class text2 {public static void main(String[] args) {String s1 = "abc";String s2 = "ab";String s3 = s2+"c";System.out.println(s1==s3);}
}
//结果
//false

①系统底层会自动创建一个StringBuilder对象(在堆内存中地址值1),然后再调用其append 方法完成拼接

②拼接后,再调用其toString方法转换为String类型(在堆内存中地址值2

2.当引号生成的字符串之间拼接

public class text2 {public static void main(String[] args) {String s1 = "abc";String s2 = "a"+"b"+"c";System.out.println(s1==s2);}
}
//结果
//true

①java存在常量优化机制,在编译的时候,就会将“a”+“b”+“c”拼接为“abc”(在常量池中的内存地址

(四)字符串比较值是否相同

1.equals()

①格式

boolean 变量名 = 字符串1 . equals (字符串2) ;

(返回布尔类型)

②举例
public class text2 {public static void main(String[] args) {String s1 = "abc";String s2 = "ABc";boolean ans = s1.equals(s2);System.out.println(ans);}
}
//结果
//false

2. equalsIgnoreCase()——忽略大小写

①格式

boolean 变量名 = 字符串1 . equalsIgnoreCase (字符串2);

②举例
public class text2 {public static void main(String[] args) {String s1 = "abc";String s2 = "ABc";boolean ans = s1.equalsIgnoreCase(s2);System.out.println(ans);}
}
//结果
//true

(五)遍历字符串

1.利用chatAt()方法逐一遍历

 ①格式

char 变量名 = 字符串名 . charAt (索引);

②举例
public class text2 {public static void main(String[] args) {String s1 = "abc";for (int i = 0; i < s1.length(); i++) {char ans= s1.charAt(i);System.out.println(ans);}}
}
//结果
//a
//b
//c

2. 利用public char [ ] toCharArray ( )将当前字符串拆分为字符数组并返回

①格式

char[ ] 数组名 = 字符串名 . toCharArray();

②举例
public class text2 {public static void main(String[] args) {String s1 = "abc";char[] a = s1.toCharArray();for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}
}
//结果
//a
//b
//c

(六)判断单字符是大写字母、小写字母还是数字

1.直接判断

①格式

大写字母:'A'<=单字符变量<='Z'

小写字母:'a'<=单字符变量<='z'

数字:'0'<=单字符变量<='9'

②举例
public class text2 {public static void main(String[] args) {String s1 = "aB99";char[] a = s1.toCharArray();for (int i = 0; i < a.length; i++) {char c = a[i];if (c <='Z' && c>='A') {System.out.println(c+"是大写字母");} else if (c<='z' && c>='a') {System.out.println(c+"是小写字母");} else if (c<='9' && c>='0') {System.out.println(c+"是数字");}}}
}
//结果
//a是小写字母
//B是大写字母
//9是数字
//9是数字

(七)字符串截取

 1.String substring ( int beginIndex ) 

①格式

String 变量名 = 字符串名 . substring ( 索引 ) ;

注意从传入的索引位置处,向后截取,一直截取到末尾,得到新的字符串并返回

②举例
public class text2 {public static void main(String[] args) {String s1 = "aB99";String s2 = s1.substring(2);System.out.println(s2);}
}
//结果
//99

2.String substring (int beginIndex , int endIndex )

①格式

String 变量名 = 字符串名 . substring ( 开始索引,结束索引);

注意从beginIndex索引位置开始截取,截取到endIndex索引位置,得到新字符串并返回(包含头不包含尾

 ②举例
public class text2 {public static void main(String[] args) {String s1 = "aB99";String s2 = s1.substring(1,3);System.out.println(s2);}
}
//结果
//B9

(八)替换值

1.String replace ( CharSequence targer , CharSequence replacement ) 

①格式

String 变量名 = 字符串名 . replace(被替换的旧值 ,替换的新值);

注意:将当前字符串中的target(被替换的旧值)使用replacement(替换的新值)进行替换,返回新的字符串。

②举例
public class text2 {public static void main(String[] args) {String s1 = "aB99666397";String s2 = s1.replace("666","***");System.out.println(s2);}
}
//结果
//aB99***397

(九)切割字符串

1.String [ ] split ( String regex )

①格式

String[ ] 变量名 = 字符串名 . split ("符号");

注意:根据传入的字符串作为规则进行切割,将切割后的内容存入字符串数组中,并将字符串数组返回

②举例  
public class text2 {public static void main(String[] args) {String s1 = "aB//996,66,397";String [] arr = s1.split(",");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]);}}
}
//结果
//aB//99666397

三、StringBuilder类(在lang包下,不需要导包)

(一)概述

是一个可变的字符串类,我们可以把它看成是一个容器,可以提高字符串的操作效率。 

(二)StringBuilder类常用的构造方法

1.public  StringBuilder()——创建一个空白可变字符串对象,不含有任何内容

public class text2 {public static void main(String[] args) {StringBuilder sb = new StringBuilder();System.out.println(sb);}
}
//结果
//#空行

2.public StringBuilder(String str)——根据字符串的内容,来创建可变字符串对象

public class text2 {public static void main(String[] args) {StringBuilder sb = new StringBuilder("weknh");System.out.println(sb);}
}
//结果
//weknh

(三)StringBuilder类常用方法

1.public StringBuilder append (任意类型)——添加任意数据类型数据,将其转为字符串类型,并返回对象本身(无论赋值给多少个变量,都统一指向一个内存地址)

①格式

StringBuilder 变量名1 = new StringBuilder();

变量名 . append ( 任意类型 );

②举例
public class text2 {public static void main(String[] args) {StringBuilder sb = new StringBuilder();StringBuilder sb1 = sb.append(666);StringBuilder sb2 = sb.append("hello");sb.append(true);
//        sb、sb1、sb2均指向同一个内存地址,所以打印出来的值相同System.out.println(sb);System.out.println(sb1);System.out.println(sb2);}
}
//结果
//666hellotrue
//666hellotrue
//666hellotrue
③注意

!!!链式编程:如果一个方法返回的是对象类型,对象就可以继续向下调用方法。

格式

变量名1 . append ( 任意类型 ) . append ( 任意类型 ) . append()...#多次调用append方法

举例

public class text2 {public static void main(String[] args) {StringBuilder sb = new StringBuilder();
//        因为StringBuilder类的append方法返回的是对象类型sb.append(8888).append("hello").append(false);System.out.println(sb);}
}
//结果
//8888hellofalse

2.public StringBuilder reverse()——返回相反的字符串序列

①格式

变量名1 . reverse ( );

②举例
public class text2 {public static void main(String[] args) {StringBuilder sb = new StringBuilder();
//        因为StringBuilder类的reverse方法返回的是对象类型sb.append(8888).append("hello").append(false);sb.reverse().append("yes");System.out.println(sb);}
}
//结果
//eslafolleh8888yes
③注意

!!!同样可以使用链式编程。 

3.public int length()——返回长度(字符出现的个数)

①格式

变量名1 . length() ;

②举例
public class text2 {public static void main(String[] args) {StringBuilder sb = new StringBuilder();sb.append(8888).append("hello").append(false);sb.reverse().append("yes");System.out.println(sb.length());}
}
//结果
//17

4.public String toString()——通过toString就可以实现把StringBuilder转换为String 

①格式

String 变量名2 = 变量名1 . toString ( ) ;

②举例
public class text2 {public static void main(String[] args) {StringBuilder sb = new StringBuilder();sb.append(8888).append("hello").append(false);sb.reverse().append("yes");String s = sb.toString();System.out.println(s);}
}
//结果
//eslafolleh8888yes

四、String类与StringBuilder类的区别

1.String类:内容是不可变的

2.StringBuilder类:内容是可变的 

http://www.xdnf.cn/news/412741.html

相关文章:

  • 手写 vue 源码 === computed 实现
  • JavaScript高级进阶(七)
  • shell命令大全
  • 基于STM32、HAL库的BMP581气压传感器 驱动程序设计
  • springBoot中的Starter-启动器
  • 重学安卓14/15自由窗口freeform企业实战bug-学员作业
  • 本地文件查重管理工具EasyFileCount v3.0.5.1绿色版,支持查找大重复文件+自动分类
  • 客户端限流主要采用手段:纯前端验证码、禁用按钮、调用限制和假排队
  • jwt学习
  • 如何通过DNS解析实现负载均衡?
  • Android Exoplayer 实现多个音视频文件混合播放以及音轨切换
  • 3d模型的添加与设置
  • VMware虚拟机实例-docker启动失败
  • Linux文件编程——read函数与lseek函数
  • 火狐浏览器安装自定义插件
  • 人工智能的哲学与社会影响
  • 【时时三省】(C语言基础)字符数组的输入输出
  • 做好的QT软件,换一个笔记本打开后发现字体很小,部分字体还被控件遮挡
  • 提示工程实战指南:Google白皮书关键内容一文讲清
  • 第二十二天打卡
  • #将一个 .c 文件转变为可直接运行的文件过程及原理
  • CTF实战秘籍:跨平台文件合并与数据重构技术
  • linux-进程信号的产生
  • OJ判题系统第4期之判题机模块架构——设计思路、实现步骤、代码实现(工厂模式、代理模式的实践)
  • 嵌入式MCU和Linux开发哪个好?
  • FreeRTOS的学习记录(基础知识)
  • FPGA----petalinux开机启动自定义脚本/程序的保姆级教程(二)
  • 【超详细教程】安卓模拟器如何添加本地文件?音乐/照片/视频一键导入!
  • 利用基于LLM的概念提取和FakeCTI数据集提升网络威胁情报对抗虚假信息活动的能力
  • 区块链+农业:从田间到餐桌的信任革命