字符串的基本概念
字符串或串(String)是由数字、字母、下划线组成的一串字符。
程序通常需要处理大量文本数据,Java 语言的文本数据被保存为字符或字符串类型。
字符串在开发中的应用场景
字符串操作就是以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。
创建字符串
Java定义字符串(2种方式)
1.在 Java 中定义一个字符串最简单的方法是用双引号把它包围起来,直接赋值
String s = "aa";
2.使用new关键字
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列。换句话说,新创建的字符串是该参数字符串的副本。
String str1 = new String("Hello Java");
字符串常量池
String string0= "hello";//存放在字符串常量池里
String string1="hello";//发现在字符串常量池里存在就不创建,而是使用字符串常量池里原有的
这时我们使用== 来判断string0和string1的地址相等,使用equals来判断值相等
此时==结果为true,equals的结果为true。
如果字符串常量池中没有再重新创建一份
String字符串的不变性
字符串一旦创建,任何方法都不能修改其内容
字符串的常用操作
equals方法
String s = "aa";String s1 = "aa";
注意 对于引用数据类型(字符串,对象,数组,类) equals用于判断值相等,对于基础数据类型 判断用==
if(s.equals(s1)){
System.out.println("值相等");
}
//==用于判断地址相等 ,结果是相等的,因为在字符串常量池里
if(s==s1){
System.out.println("地址相等");
}
new String 用来在堆中创建字符串
String s = "aa";String s1 = new String("aa");
if(s.equals(s1)){
System.out.println("值相等");
}
if(s==s1){
System.out.println("地址不等"); //因为new 新创建了一个对象
}
字符串的拼接使用+号,concat完成
String s = "hello";String s1 = " word";System.out.println(s+s1);
字符串操作的相关函数网址
https://www.matools.com/api/java8
charAt 查找字符在字符串中的索引的位置,出现的位置
String str = "Hello, World!";
char ch1 = str.charAt(4);
System.out.println("字符在索引4的位置是: " + ch1);
substring字符串截取
String astring="abs";
String b = astring.substring(1);
System.out.println(b);
indexOf 字符串查找
String astring1="abs";
astring1.indexOf("bs");
System.out.println( astring1.indexOf("bs"));
StringBuffer
字符串变量(Synchronized,即线程安全)。通过 StringBuffer 创建的对象是创建在堆 (heap) 上的,如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer 它是线程安全的,适合多线程环境下使用。由于线程安全,其性能较慢。
StringBuffer s = new StringBuffer("hello");
// 增
s.append(','); // "hello,"
s.append("张三丰");// "hello,张三丰"
s.append("赵敏").append(100).append(true).append(10.5);// "hello,张三丰赵敏100true10.5"
System.out.println(s);// "hello,张三丰赵敏100true10.5"
// 删
/* * 删除索引为 >= start && < end 处的字符
解读: 删除 11~14的字符 [11, 14)
*/
s.delete(11, 14);
System.out.println(s);// "hello,张三丰赵敏true10.5"
// 改
// 解读,使用 周芷若 替换 索引9-11的字符 [9,11)
s.replace(9, 11, "周芷若");
System.out.println(s);// "hello,张三丰周芷若true10.5"
// 查
// 查找指定的子串在字符串第一次出现的索引,如果找不到返回-1
int indexOf = s.indexOf("张三丰");
System.out.println(indexOf);// 6
// 插
// 解读,在索引为9的位置插入 "赵敏",原来索引为9的内容自动后移
s.insert(9, "赵敏");
System.out.println(s);// "hello,张三丰赵敏周芷若true10.5"
// 长度
// 返回字符的个数,与容量无关
System.out.println(s.length());// 22
System.out.println(s);
StringBuilder 与 StringBuffer 类似,它的值也是存储在堆上,同时也可以被修改。两者之间最大的不同就是 StringBuilder 不是线程安全的,但同时也因为它不需要考虑线程安全,它的性能更好。是单线程的,不建议使用
字符串与其他类型相互转换
1.任意基本类型或引用类型 转换为 字符串
使用静态方法valueOf()
String.valueOf(123); // "123"
String.valueOf(45.67); // "45.67"
String.valueOf(true); // "true"
String.valueOf(new Object()); // 类似java.lang.Object@636be97c
2.字符串 转换为 其他类型
1.字符串转换成Int型
int/Integer num = Integer.parseInt(String str);
2.字符串转换成long型
Long/long num = Long.parseLong(String str);
3.转换成short型
short/Short num = Short.parseShort(String str);
4.转换成float型
float/Float num = Float.parseFloat(String str);
5.转换成double型
double/Double num = Double.parseDouble(String str);