00018.03 String的常用方法(包含toUpperCase、toLowerCase、 toCharArray、编码、解码)char相关、byte相关

本文详细介绍了Java中String类的常用方法,包括length()、isEmpty()、toLowerCase()、trim()、concat()等。重点讨论了与字符和字节相关的操作,如toCharArray()、charAt()、getBytes()以及字符编码与解码的概念。同时,提到了编码与解码不一致导致的乱码问题,并强调了String对象的不可变性在拼接操作中的影响。

系列文章目录

前言

前面文章字符串对象罗里吧嗦讲了一大堆,现在我们来看字符串的方法

一、 String的常用方法系列一

在这里插入图片描述
这个就比较简单了

但是有些需要注意的地方
(1)int length():返回字符串的长度,返回的是字符的个数
因为String的内部(JDK1.9之前)用char[]实现,这个长度就是value数组的长度
(2)boolean isEmpty():是否是空字符串 必须要是空字符串或者字符串才行,如果是null(空指针异常)或者没有初始化的会报错
(3)String toLowerCase()、String toUpperCase()
(4)String trim() :去掉字符串的前后空白符
(5)String concat():拼接,等价于+

看一个问题为什么没有去掉空格
在这里插入图片描述
这个又回到之前我们说的,String每次都会new一个新对象
你打印的是老对象
所以必须要接收,这里的问题就是没有接收
在这里插入图片描述
在这里插入图片描述
拼接我们也看看
顺便猜一下,s3和s4地址是不是一样
在这里插入图片描述
在这里插入图片描述

变量跟变量拼接 肯定不是一个地址,这个不能忘记,常量跟常量拼接就是一样的地址
但是内容是一样的,用equals判断内容
在这里插入图片描述

二、String的常用方法系列二——和char相关

我们工作中也许经常用到toCharArray( ) 但是它是什么意思你是否还记得

(1)char[] toCharArray() 应用场景有很多比如 统计大写字母的个数
在这里插入图片描述

(2)char charAt(index) 取出某个位置的字符
在这里插入图片描述
(3)String(char[] arr)
字符串可以变成字符数组,那么字符数组能不能变成字符串呢

能,用此字符串构造器
在这里插入图片描述

(4)String(char[] arr,int offset, int count)
甚至还可以指定取几个
在这里插入图片描述
小结:
(1)char[] toCharArray()
(2)char charAt(index)
(3)String(char[] arr)
(4)String(char[] arr,int offset, int count)

三、String的常用方法系列三——和字节相关(即byte)或者说和编码相关

(1)byte[] getBytes():编码的方法,使用平台默认的字符编码进行编的 byte[] getBytes(编码方式):

什么叫平台默认?
在这里插入图片描述

首先我们想搞清楚一个概念:
什么叫编码,什么叫解码
编码:把字符–>字节的过程 编码是编给计算机看
解码:把字节–>字符的过程(与编码相反)解码是解给人看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如上图,是什么原因造成的
我们需要明白一个概念
编码:对应ASCII码范围内,无论是用什么编码方式,结果都是一样的,一个字符对应一个编码值
如果不熟悉可以直接翻阅Notepat++
在这里插入图片描述
在这里插入图片描述
需要注意的是前面128个是全世界都一样的,后面的则不一定
即 编码:对于ASCII码范围内(0~127),无论用什么编码方式,结果都是一样的,一个字符对应一个字节的编码值
对于其他的字符,编码,结果不一定是几个字节,例如汉字:
UTF-8:变长的,但是大多数汉字都是3个字节
GBK、GB2312:固定2个字节
ISO8859-1:不支持中文,所有字符都变为1个字节

汉字一般是三个字节,比如 你很棒 应该就是9个字节
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
需要注意的是,有些编码后解码不回来,会丢数据
在这里插入图片描述
而其它的是能够找回来的
在这里插入图片描述
乱码:
(1)编码与解码字符集不一致
(2)缺字节

(2)new String(字节数组)

即解码

### 常用的构造方法 String 提供了多种构造方法用于创建字符串对象。例如,可以通过直接赋值的方式创建字符串,也可以使用 `new String()` 构造方法从字符数组或其他字符串创建新的字符串对象 [^1]。 ```java String str1 = "Hello"; char[] charArray = {'J', 'a', 'v', 'a'}; String str2 = new String(charArray); // 从字符数组创建字符串 String str3 = new String("World"); // 直接传入字符串常量 ``` ### 字符串长度与转换操作 String 提供了一系列方法用于获取字符串的基本信息进行格式转换: - `int length()`:返回字符串的字符个数。 - `byte[] getBytes()`:将字符串转换为字节数组。 - `char[] toCharArray()`:将字符串转换为字符数组 [^2]。 ```java String str = "Java"; byte[] byteArray = str.getBytes(); // 转换为字节数组 char[] charArray = str.toCharArray(); // 转换为字符数组 int length = str.length(); // 获取字符个数 ``` ### 字符串比较与查找操作 String 支持多种方式对字符串进行比较查找: - `boolean equals(Object)`:判断两个字符串的内容是否相同。 - `boolean equalsIgnoreCase(String)`:忽略大小写地比较两个字符串。 - `int indexOf(String)`:查找指定内容第一次出现的下标。 - `int lastIndexOf(String)`:查找指定内容最后一次出现的下标 [^2]。 ```java String str1 = "hello"; String str2 = "HELLO"; boolean isEqual = str1.equals(str2); // false boolean isEqualIgnoreCase = str1.equalsIgnoreCase(str2); // true int index = "Java is fun".indexOf("is"); // 返回 "is" 第一次出现的位置 int lastIndex = "Java is fun and Java is powerful".lastIndexOf("Java"); // 返回最后一个 "Java" 的起始位置 ``` ### 字符串替换与截取操作 String 提供了一些方法用于修改截取字符串内容: - `String replace(CharSequence, CharSequence)`:将某个内容全部替换成指定内容。 - `String replaceAll(String, String)`:支持正则表达式替换。 - `String substring(int)`:从指定下标开始截取到字符串末尾。 - `String substring(int, int)`:从指定范围截取子字符串 [^2]。 ```java String str = "Java is great!"; String replaced = str.replace("great", "awesome"); // 替换内容 String replacedWithRegex = str.replaceAll("a", "A"); // 使用正则替换所有 "a" String subStr1 = str.substring(5); // 截取从索引5开始的部分 String subStr2 = str.substring(0, 4); // 截取从索引0到索引3的子字符串 ``` ### 字符串分割与格式化操作 String 包含用于分割格式化的常用方法: - `String[] split(String)`:按照指定规则将字符串拆分成数组。 - `String toUpperCase()`:将字符串转换为大写形式。 - `String toLowerCase()`:将字符串转换为小写形式。 - `String trim()`:去除字符串前后的空格 [^2]。 ```java String str = "apple,banana,orange"; String[] fruits = str.split(","); // 按逗号分割成数组 String lowerCase = "lowercase"; String upperCaseStr = lowerCase.toUpperCase(); // 转换为大写 String withSpaces = " Hello World! "; String trimmed = withSpaces.trim(); // 去除前后空格 ``` ### 字符串判断操作 String 提供了一些布尔型的方法用于判断字符串的状态: - `boolean contains(CharSequence)`:判断字符串是否包含指定内容。 - `boolean startsWith(String)`:判断字符串是否以指定内容开头。 - `boolean endsWith(String)`:判断字符串是否以指定内容结尾 [^2]。 ```java String str = "Java programming is fun!"; boolean containsJava = str.contains("Java"); // 判断是否包含 "Java" boolean startsWithJava = str.startsWith("Java"); // 判断是否以 "Java" 开头 boolean endsWithFun = str.endsWith("fun!"); // 判断是否以 "fun!" 结尾 ``` ### 字符串拼接与性能优化 虽然 String 本身是不可变,每次拼接都会生成新对象,但在实际开发中可以使用 `StringBuilder` 或 `StringBuffer` 来提高性能。其中 `StringBuilder` 是非线程安全的,适用于单线程环境;而 `StringBuffer` 是线程安全的,适用于多线程环境 [^1]。 ```java StringBuilder sb = new StringBuilder(); sb.append("Java"); sb.append(" is "); sb.append("powerful!"); String result = sb.toString(); // 最终生成字符串 ``` ### 字符串对称性判断示例 以下是一个简单的 Java 程序,用于判断用户输入的字符串是否对称(回文字符串): ```java import java.util.Scanner; public class HomeWork11 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入一个字符串,判断是否对称"); String s = scan.next(); for (int i = 0; i < s.length() / 2; i++) { if (s.charAt(i) != s.charAt(s.length() - 1 - i)) { System.out.println(s + "不对称"); break; } else if (i == s.length() / 2 - 1) { System.out.println(s + "对称"); } } } } ``` 该程序通过遍历字符串的一半长度,并逐个比较对应字符是否相等来判断是否对称 [^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值