字符串的特点:
- 字符串的内容永不可变
- 字符串时可以共享使用的,可以达到节省内存的作用,前提是字符串内容不可变
- 字符串效果上相当于是char[]字符串数组,但是底层原理是byte[]字节数组
- 每个双引号包含的字符串都是字符串对象
分别三种构造方法,一种直接创建方法
相关代码:
public class a17_字符串构造方法 {
public static void main(String[] args) {
// 使用空参构造
String str01 = new String();
System.out.println("第一个构造的字符串:" + str01);
// 根据字符数组创建字符串
char[] arr01 = {'A','b','c'};
String str02 = new String(arr01);
System.out.println("用字符数组创建字符串:" + str02);
// 根据字节数组创建字符串
byte[] arr02 = {97,98,99};
String str03 = new String(arr02);
System.out.println("用字节数组创建字符串:" + str03);
// 直接创建
String str04 = "abc";
System.out.println("直接创建字符串:" + str04);
}
}
- 程序当中直接写上的双引号字符串,就在字符串常量池中
- 对于基本类型来说,
==
时进行数值的比较- 对于引用类型来说,
==
时进行地址值的比较- 双引号直接写的字符串在常量池当中,new的不再池当中
相关代码:
public class a18_字符串的常量池 {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
char[] charArray = {'a','b','c'};
String str3 = new String(charArray);
System.out.println(str1 == str2);
System.out.println(str1 == str3);
System.out.println(str2 == str3);
}
}
- equals方法是比较字符串内容是否相等(不忽略大小写)
- 任何对象都能用object进行接收
- equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样
- 如果比较双方一个常量一个变量,推荐把常量字符串写在前面
相关代码:
public class a19_字符串的比较相关方法 {
public static void main(String[] args) {
String str01 = "abc";
String str02 = "abc";
char[] charArray01 = {'a','b','c'};
String str03 = new String(charArray01);
// 比较内容
System.out.println(str01.equals(str02));
System.out.println(str01.equals(str03));
System.out.println(str03.equals("abc"));
System.out.println("abc".equals(str03));
System.out.println("Abc".equals(str03));
}
}
相关代码:public class a19_字符串的比较相关方法 {
public static void main(String[] args) {
String str04 = "abc";
String str05 = "Abc";
char[] charArray02 = {'a','B','c'};
String str06 = new String(charArray02);
System.out.println(str04.equals(str05));
System.out.println(str04.equalsIgnoreCase(str05));
System.out.println(str05.equalsIgnoreCase(str06));
}
}
public int length();
获取字符串长度public String concat(String str);
拼接字符串public char charAt(int index);
获取字符串索引位置public int indexOf(String str);
获取参数字符串在本字符串中第一次索引位置
相关代码:
public class a20_字符串的获取相关方法 {
public static void main(String[] args) {
// 获取字符串长度
String str01 = "abcd1234";
System.out.println("字符串的长度是:" + str01.length());
// 拼接字符串
String str02 = "abc";
String str03 = "d12";
String str04 = "34";
String str05 = str02.concat(str03.concat(str04));
System.out.println("拼接之后的字符串为:" + str05);
System.out.println("---------");
// 获取指定索引位置的单个字符
String str06 = "abcd1234";
System.out.print("以单个字符的形式获取: ");
for (int i = 0; i < str06.length(); i++){
char str07 = str06.charAt(i);
System.out.print(str07 + " | ");
}
System.out.println();
System.out.println("---------");
// 查找参数字符串在本来字符串当中出现的第一次索引位置
// 如果根本没有,返回-1值
String str08 = "abcd1234abc";
System.out.println("abc的第一次索引值是:" + str08.indexOf("abc"));
System.out.println("abd的第一次索引值是:" + str08.indexOf("abc3"));
}
}
- public String substring(int index); 截取从参数位置一直到字符串末尾,返回新字符串
- public String substring(int begin, int end); 截取从begin开始,一直到end结束的字符串,包含begin,不包含end
相关代码:
public class a21_字符串的截取方法 {
public static void main(String[] args) {
String str01 = "abc 1234abc";
System.out.println("从索引值4开始截取字符串:" + str01.substring(4));
System.out.println("截取索引值4到6的字符串:" + str01.substring(4,6));
}
}
public char[] toCharArray();
将当前字符串拆分成为字符数组作为返回值public byte[] getBytes();
获得当前字符串底层的字节数组public String replace(CharSequence oldString, CharSequence newString);
将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串
相关代码:
public class a22_字符串转换的相关方法 {
public static void main(String[] args) {
String str01 = "abc1234abc";
char[] str02 = str01.toCharArray();
byte[] str03 = str01.getBytes();
String str04 = str01.replace("a", "b");
System.out.println("源字符串:" + str01);
System.out.print("字符数组形式:");
for (int i = 0; i < str02.length; i++) {
if (i == str02.length-1){
System.out.println(str02[i]);
break;
}
System.out.print(str02[i] + " | ");
}
System.out.print("字节数组形式:");
for (int i = 0; i < str03.length; i++) {
if (i == str03.length-1){
System.out.println(str03[i]);
break;
}
System.out.print(str03[i] + " | ");
}
System.out.println("转换后的字符串:" + str04);
}
}
public String[] split(String regex);
根据参数规则,将字符串切分成为若干部分- split方法的参数其实就是一个正则表达式
相关代码:
public class a23_字符串的切割方法 {
public static void main(String[] args) {
String str01 = "a-bc-123-4de-f";
String[] arr02 = str01.split("-");
System.out.print("切割后的数组为:");
for (int i = 0; i < arr02.length; i++) {
System.out.print(arr02[i] + " ");
}
}
}
按指定格式拼接字符串
public class a24_练习按指定格式拼接字符 {
public static void main(String[] args) {
String[] arr01 = {"1","2","3"};
String text01 = "[";
for (int i = 0; i < arr01.length; i++) {
if (i == arr01.length - 1){
text01 = text01.concat("word".concat(arr01[i].concat("]")));
System.out.println("添加完成:" + text01);
break;
}
text01 = text01.concat("word".concat(arr01[i].concat("#")));
}
}
}
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.util.Scanner;
public class a25_练习统计输入字符串 {
public static void main(String[] args) {
String in = new Scanner(System.in).next();
char[] arr01 = in.toCharArray();
int big = 0;
int small = 0;
int number = 0;
int other = 0;
for (int i = 0; i < arr01.length; i++) {
char ch01 = arr01[i];
if ('A' <= ch01 && ch01 <= 'Z'){
big += 1;
}else
if ('a' <= ch01 && ch01 <= 'z'){
small += 1;
}else
if ('0' <= ch01 && ch01 <= '9'){
number += 1;
}else
other += 1;
}
System.out.println("大写字母:" + big);
System.out.println("小写字母:" + small);
System.out.println("数字:" + number);
System.out.println("其他字符:" + other);
}
}