字符串的特点:
- 字符串的内容永不可变。
- 正式因为字符串的内容永不可变,所以字符串是可以共享使用的。
- 字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。
创建字符串的常见3+1种方式。
三种构造方法:
- public String():创建一个空白字符串,不含有任何内容。
- public String(char[] array):根据字符数组的内容,来创建对应的字符串。
- public String(byte[] array):根据字节数组的内容,来创建对应的字符串。
一种直接创建:
String str = “”;
注意:直接写上双引号,就是字符串对象。
package day04;
public class Demo01 {
public static void main(String[] args) {
// 使用空参数构造
String str1 = new String(); // 小括号留空,此时字符串什么内容都没有
System.out.println("第一个字符串是: " + str1);
// 根据字符数组创建字符串
char[] array = { 'A','B','C' };
String str2 = new String(array);
System.out.println("第二个字符串是:" + str2);
// 根据字节数组来创建字符串
byte[] byteArray = { 97,98,99 };
String str3 = new String(byteArray);
System.out.println("第三个字符串是: " + str3);
// 直接创建
String str4 = "Hello";
System.out.println("第四个字符串是: " + str4);
}
}
字符串常量池:程序当中直接写上的双引号字符串就在字符串常量池当中。
对于基本类型来说,==是进行数值的比较。
对于引用类型来说,==是进行地址值的比较。
如果确实需要字符串内容的比较,可以使用两种方法:
- public boolean equals(Object obj):参数可以是任何对象,只有参数是一个字符串并且内容相同才会给出True,否则返回False。
- public boolean equalsIgnoreCase(String str):忽略大小写,进行内容的比较。
package day04;
/*
equals 方法具有对称性,就是a.equals(b)与b.equals(a)的效果相同
如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
*/
public class StringEqual {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Hello";
char[] charArray = { 'h','e','l','l','o' };
String str3 = new String(charArray);
System.out.println(str1.equals(str2)); // True
System.out.println(str2.equals(str3)); // false
System.out.println(str1.equalsIgnoreCase(str3)); // true
}
}
String当中获取相关的常用方法有:
- public int length():获取字符串当中含有的字符串个数,拿到字符串长度。
- public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串。
- public char chatAt(int index):获取指定索引位置的单个字符。(索引从0开始)。
- public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1。
package day05;
public class Demo2StringGet {
public static void main(String[] args) {
// 获取字符串的长度
int length = "dhaiosdhakshdalh".length();
System.out.println("字符串的长度: " + length);
// 拼接字符串
String str1 = "Hello";
String str2 = "World";
String str3 = str1.concat(str2);
System.out.println("拼接字符串: " + str3);
// 获取指定索引位置的字符
char ch = "Hello".charAt(1);
System.out.println("获取的指定索引位置的字符是: " + ch);
// 查找参数字符串在本来字符串当中出现的第一次索引位置
String original = "Hello World";
int lo = original.indexOf("lo");
System.out.println("参数字符串出现的位置: " + lo);
}
}
字符串的截取方法:
- public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串。
- public String substring(begin end):截取从begin开始到end结束的中间的字符串。
- 备注:[begin,end)。包含左边,不包含右边。
package day05;
public class DemoSubString {
public static void main(String[] args) {
String str1 = "HelloWorld";
String str2 = str1.substring(5);
System.out.println("截取的字符串是: " + str2);
String str3 = str1.substring(4,6);
System.out.println("截取的字符串是: " + str3);
}
}
String当中与转换相关的常用方法有:
- public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值。
- public byte[] getBytes():获取当前字符串底层的字节数组。
- public String replace(CharSequence oldString,charSequence newString):将所有出现的旧的字符串替换成为新的字符串,返回替换之后的新字符串。其中CharSequence可以接受字符串类型。
package day05;
public class DemoStringConvert {
public static void main(String[] args) {
char[] chars = "Hello".toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
byte[] bytes = "ABC".getBytes();
System.out.println(bytes[1]);
String str1 = "How do you do!";
String o = str1.replace("o", "*");
System.out.println("替换后的字符串是: " + o);
}
}
分割字符串的方法:
- public String[] split(String regex):按照参数的规则,将字符串切分成为若干部分。
- 注意事项:split方法的参数其实是一个正则表达式。
package day05;
public class DemoStringSplit {
public static void main(String[] args) {
String str1 = "aaa,bbb,ccc";
String[] array1 = str1.split(",");
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i]);
}
}
}
练习:
1.定义一个方法,把数组{1,2,3}按照指定的格式拼接成为一个字符串。格式按照如下:[world1#world2#world3#]。
package day05;
public class DemoStringPractice {
public static void main(String[] args) {
int[] array = { 1,2,3,4 };
System.out.println(fromArray(array) );
}
public static String fromArray(int[] array) {
String str = "[";
for (int i = 0; i < array.length; i++) {
if (i == array.length - 1) {
str += "world" + array[i] + "]";
}
else {
str += "world" + array[i] + "#";
}
}
return str;
}
}
2.键盘输入一个字符串,并且统计其中各种字符串出现的次数。
package day05;
import java.util.Scanner;
public class DemoStringCount {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串: ");
String inpout = sc.next(); // 获取字符串
int countUpper = 0; //大写字母
int countLower = 0; // 小写字母
int countNumber = 0; // 数字
int countOther = 0; // 其他
char[] chars = inpout.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] >= 'A' && chars[i] <= 'Z') {
countUpper++;
}
else if (chars[i] >= 'a' && chars[i] <= 'z') {
countLower++;
}
else if (chars[i] >= '0' && chars[i] <= '9') {
countNumber++;
}
else {
countOther++;
}
}
System.out.println("大写字母是:" + countUpper + "小写字母是:" + countLower + "数字是:" + countNumber + "其他是:" + countOther);
}
}