Java学习笔记09:字符串
程序员文章站
2022-04-10 23:26:31
...
常用方法
package com.imooc.string;
public class StringDemo1 {
public static void main(String[] args) {
//定义一个字符串“JAVA 编程 基础”
String str = "JAVA 编程 基础";
//打印输出字符串的长度
System.out.println("字符串的长度是:"+str.length());
//字符串chatAt(int index)
//取出字符程并输出
System.out.println(str.charAt(6));
//取出子串“编程 基础"并输出
System.out.println(str.substring(5));
//取出子串“编程"并输出
System.out.println(str.substring(5,7));
}
}
输出结果:
字符串的长度是:10
程
编程 基础
编程
indexOF(),lastIndexOf(),两个参数时的使用方法
package com.imooc.string;
public class StringDemo2 {
public static void main(String[] args ) {
//定义一个字符串"Java编程基础,我喜欢Java编程"
String str = new String("Java编程基础,我喜欢Java编程");
//查找字符“A”在字符串中第一次出现的位置
System.out.println("字符‘a’在字符串中第一次出现的位置:"+str.indexOf('a'));
//查找子串“编程”在字符串中第一次出现的位置
System.out.println("字符‘编程’在字符串中第一次出现的位置:"+str.indexOf("编程"));
//查找字符“A”在字符串中最后一次出现的位置
System.out.println("字符‘a’在字符串中最后一次出现的位置:"+str.lastIndexOf('a'));
//查找子串“编程”在字符串中最后一次出现的位置
System.out.println("字符‘编程’在字符串中最后一次出现的位置:"+str.lastIndexOf("编程"));
//在字符串index值为8的位置开始,查找子串“编程”第一次出现的位置
System.out.println("在字符串index值为8的位置开始,查找子串‘编程’第一次出现的位置"+str.indexOf("编程",8));
}
}
字符‘a’在字符串中第一次出现的位置:1
字符‘编程’在字符串中第一次出现的位置:4
字符‘a’在字符串中最后一次出现的位置:15
字符‘编程’在字符串中最后一次出现的位置:16
在字符串index值为8的位置开始,查找子串‘编程’第一次出现的位置16
字符串和byte数组间的相互转换
BGK和UTF-8编码问题
package com.imooc.string;
import java.io.UnsupportedEncodingException;
public class StringDemo3 {
public static void main(String[] args) throws UnsupportedEncodingException {
//字符串喝byte数组之间的相互转换
//定义一个字符串
String str = new String("JAVA 编程 基础");
//将字符串转换为byte数组,并打印输出
byte[] arrs = str.getBytes("GBK");
for (int i = 0; i < arrs.length; i ++) {
System.out.print(arrs[i]+" ");
//汉字超过128字节,以负数形式溢出
}
System.out.println();
//将byte数组转换为字符串
String str1 = new String(arrs,"GBK");
System.out.println(str1);
}
}
编码不符时会出现异常
74 65 86 65 32 -79 -32 -77 -52 32 -69 -7 -76 -95
JAVA 编程 基础
内存空间
常量池和栈中的imooc的地址是不同的。
str3 str4看上去一样,创建的却是两个空间。
package com.imooc.string;
public class StingDemo5 {
public static void main(String[] args) {
// == 和 equals方法的区别
// 定义三个字符串,内容都是imooc
String str1 = "imooc";
String str2 = "imooc";
String str3 = new String("imooc");
System.out.println("str1和str2的内容相同?"+(str1.equals(str2)));
System.out.println("str1和str3的内容相同?"+(str1.equals(str3)));
System.out.println("str1和str2的地址相同?"+(str1==str2));
System.out.println("str1和str3的地址相同?"+(str1==str3));
}
str1和str2的内容相同?true
str1和str3的内容相同?true
str1和str2的地址相同?true
str1和str3的地址相同?false
字符串的不可变性
package com.imooc.string;
public class StringDemo6 {
public static void main(String[] args) {
//String的不可变性
//String对象一旦被创建,则不能修改,是不可变的
//所谓的修改其实是创建了新的对象,所指向的内存空间不变
String s1 = "imooc";
String s2 = "hello," + s1;
System.out.println("s1="+s1);
//s1不再指向imooc的内存空间,而是指向了"hello,imooc"
System.out.println("s2="+s2);
String s3 = new String("hello,imooc!");
System.out.println("子串"+s3.substring(0,5));
System.out.println("s3="+s3);
}
}
s1=imooc
s2=hello,imooc
子串hello
s3=hello,imooc!
StringBuilder概述
String和StringBuilder的区别:
- String具有不可变性,而StringBulder不具备
- 当频繁操作字符串时,使用StringBulder
StringBuilder和StringBuffer
- 两者基本相似
- StringBuffer是线程安全的,StringBuilder则没有,所以性能略高
package com.imooc.string;
public class StringBuilderDemo1 {
public static void main(String[] args) {
//定义一个字符串“你好”
StringBuilder str = new StringBuilder("你好");
//在你好后面添加内容,将字符串变成“你好,imooc!”
//str.append(',');
//str.append("imooc!");
//System.out.println("str = "+str);
System.out.println("str = "+str.append(',')+str.append("imooc!"));
System.out.println(str);
//将字符串变成"你好,iMOOC!”
//两种方式:
//1.使用delete方法删除mooc,然后插入MOOC
//System.out.println("替换后:"+str.delete(4,8).insert(4, "MOOC"));
//2.使用replace方法直接替换
System.out.println("替换后:"+str.replace(4,8,"MOOC"));
//在字符串“你好,iMOOC"中取出"你好"并输出
System.out.println(str.substring(0,2));
}
str = 你好,你好,imooc!
你好,imooc!
替换后:你好,iMOOC!
你好