JAVA进阶12
间歇性混吃等死,持续性踌躇满志系列-------------第12天
1、字符串的概述和特点
java.lang.String类代表字符串
API当中说,Java程序中所有的字符串字面值(如“abc")都作为此类的实例实现
其实就是说:程序中所有的双引号字符串都是String类的对象(就算没有new,也照样是)
字符串的特点:
①字符串的内容用不可变
②字符串可以共享使用
③字符串效果上相当于char[]字符数组,但是底层原理是byte[]字节数组
2、字符串的构造方法和直接创建
创建字符串的常见3+1种方式
三种构造方法:
①public String(); //创建一个空白字符串,不含有任何内容
②public String(char[] array); //根据字符串数组的内容,来创建对应的字符串
③public String(byte[] array); //根据字节数组的内容,来创建对应的字符串
一种直接创建:
String str = "hello"; //右边直接使用双引号
注:直接写上双引号,就是字符串
1 package cn.intcast.demo12; 2 3 public class Demo01String { 4 public static void main(String[] args) { 5 // 使用空参构造 6 String str1 = new String(); //小括号留空,说明字符串什么内容都没有 7 System.out.println("第一个字符串是:" + str1); 8 9 //根据字符数组创建字符串 10 char[] chars = {'a', 'b', 'c'}; 11 String str2 = new String(chars); 12 System.out.println("第二个字符串是:" + str2); 13 14 //根据字节数组创建字符串 15 byte[] bytes = {100, 101, 102}; 16 String str3 = new String(bytes); 17 System.out.println("第三个字符串是:" + str3); 18 19 //直接创建 20 String str4 = "abc"; 21 System.out.println("第四个字符串是:"+str4); 22 } 23 }
运行结果图
3、字符串常量池
字符串常量池:程序中直接写上的双引号字符串,就在字符串常量池中。
对于基本类型来说:==是进行数值的比较。
对于引用类型来说:==是进行地址值的比较。
1 package cn.intcast.demo12; 2 3 public class Demo01String { 4 public static void main(String[] args) { 5 String str1 = "abc"; 6 String str2 = "abc"; 7 8 char[] chars = {'a','b','c'}; 9 String str3 = new String(chars); 10 byte[] bytes = {97,98,99}; 11 String str4 = new String(bytes); 12 13 System.out.println(str1==str2); //true 14 System.out.println(str2==str3); //false 15 System.out.println(str3==str4); //false 16 System.out.println(str2==str4); //false 17 System.out.println(str4==str1); //false 18 } 19 }
运行结果图
4、字符串比较的相关方法
==是进行对象的地址值比较,如果确实需要字符串内容比较,可以使用两个方法
public boolean equals(Object obj); //参数可以是任何对象,任何对象都能用Object进行接收
只有参数是一个字符串并且内容相同的才会给true,否则返回false。
注:①equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。
②如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
推荐:”abc".equals(str1) 不推荐:str.equals("abc")
public boolean equalsIgnoreCase(String str); // 忽略大小写,进行内容比较
1 package cn.intcast.demo12; 2 3 public class Demo01String { 4 public static void main(String[] args) { 5 String str1 = "hello"; 6 String str2 = "hello"; 7 char[] chars = {'H', 'e', 'l', 'L', 'o'}; 8 String str3 = new String(chars); 9 10 System.out.println(str1.equals(str3)); 11 System.out.println(str2.equals(str1)); 12 System.out.println(str1.equals(str2)); 13 System.out.println("hello".equals(str1)); 14 System.out.println(str1.equals("hello")); 15 System.out.println("==============================="); 16 System.out.println(str1.equalsIgnoreCase(str3)); //忽略大小写进行比较 17 } 18 }
运行结果图
5、字符串的获取相关方法
1 package cn.intcast.demo12; 2 3 public class Demo01String { 4 public static void main(String[] args) { 5 //获取字符串的长度 6 int length = "afdasfdsafwercxzv".length(); 7 System.out.println("字符串的长度是:" + length); 8 9 //拼接字符串 10 String str1 = "hello"; 11 String str2 = "world"; 12 String str3 = str1.concat(str2); 13 System.out.println("字符串拼接后的结果是:" + str3); 14 15 //获取指定索引位置的单个字符 16 char ch = "hello".charAt(0); 17 System.out.println("在0号索引位置的字符是:" + ch); 18 19 //查找参数字符串在本来字符串当中出现的第一次索引的位置 20 //如果根本没有,返回-1值 21 String str4 = "abcdfghklp"; 22 System.out.println(str1.indexOf("lk")); 23 System.out.println(str4.indexOf("abc")); 24 } 25 }
运行结果图
6、字符串的截取方法
1 package cn.intcast.demo12; 2 3 public class Demo01String { 4 public static void main(String[] args) { 5 String str1 = "ni hao"; 6 String str2 = "hello world"; 7 System.out.println(str1.substring(3)); 8 System.out.println(str2.substring(6,11)); 9 } 10 }
运行结果图
7、字符串转换相关的方法
1 package cn.intcast.demo12; 2 3 public class Demo01String { 4 public static void main(String[] args) { 5 String str1 = "ni hao"; 6 String str2 = "hello world"; 7 System.out.println(str1.toCharArray()); 8 System.out.println(str2.getBytes()); 9 10 //字符串的内容替换 11 String str3 = "how do you do"; 12 String str4 = str3.replace("o","$"); 13 System.out.println(str4); 14 } 15 }
运行结果图
8、 字符串的分割方法
1 package cn.intcast.demo12; 2 3 public class Demo01String { 4 public static void main(String[] args) { 5 String str1 = "ni hao a ha ha "; 6 String[] array1 = str1.split(" "); 7 for (int i = 0; i < array1.length; i++) { 8 System.out.println(array1[i]); 9 } 10 } 11 }
运行结果图
9、字符串拼接练习
1 package cn.intcast.demo12; 2 3 public class Demo01String { 4 public static void main(String[] args) { 5 int[] array1= {1,2,3}; 6 String str1 = fromArrayToString(array1); 7 System.out.println(str1); 8 } 9 public static String fromArrayToString(int[] array){ 10 String str = "["; 11 for (int i = 0; i < array.length; i++) { 12 if (i==array.length-1){ 13 str+="word"+array[i]+"]"; 14 }else { 15 str+="word"+array[i]+"#"; 16 } 17 } 18 return str; 19 } 20 21 }
运行结果图
10、统计输入的字符串中各种字符的个数
1 package cn.intcast.demo12; 2 3 import java.util.Scanner; 4 5 public class Demo01String { 6 public static void main(String[] args) { 7 Scanner sc = new Scanner(System.in); 8 System.out.println("请输入一个字符串"); 9 //获取键盘输入的一个字符串 10 String s = sc.next(); 11 12 int u = 0; 13 int l = 0; 14 int n = 0; 15 int o = 0; 16 17 char[] chars = s.toCharArray(); 18 for (int i = 0; i < chars.length; i++) { 19 //当前单个字符 20 char ch = chars[i]; 21 if(ch>='A'&&ch<='Z'){ 22 u++; 23 }else if(ch>='a'&&ch<='z'){ 24 l++; 25 }else if(ch>='0'&&ch<='9'){ 26 n++; 27 }else { 28 o++; 29 } 30 } 31 System.out.println("大写字母有:"+u+"个"); 32 System.out.println("小写字母有:"+l+"个"); 33 System.out.println("数字有:"+n+"个"); 34 System.out.println("其他有:"+o+"个"); 35 } 36 }
运行结果图