java.lang.String类代表字符串。 程序当中所有的双引号字符串,都是String类的对象。(就是没有new,也照样是)
(1)字符串的特点:
1)字符串的内容永不可变;
2)正是因为字符串不可改变,所以字符串是可以共享使用的;
3)字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。
(2)创建字符串的常见3+1方式。
1)三种构造方法:
public String();创建一个空白字符串,不含有任何内容。
public String(char[] array):根据字符数组的内容,来创建对应的字符串。
public String(byte[] array):根据字节数组的内容,来创建对应的字符串。
2)一种直接创建:
String str = "hello";
注意:直接写上双引号,就是字符串对象。
public class Demo01String { public static void main(String[] args) { //使用空参构造 String str1 = new String();//小括号留空,说明字符串什么内容都没有。 System.out.println("第一个字符串:"+str1); //根据字符数组创建字符串 char[] charArray = {'A','B','C'}; String str2 = new String(charArray); 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); } }
字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。new的不在池当中。
对于基本类型来说,==是进行数值的比较。
public class Demo02StringPool { 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);//true System.out.println(str1==str3);//false System.out.println(str2==str3);//false } }
==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法:
(1)public boolean equals(Object obj):参数可以是任何对象,只有参数是字符串并且内容相同的才会是true; 否则返回false。
备注;任何对象都能使用Object进行接收。
(2)public boolean equalsIgnoreCase(String str):忽略大小写,进行内容比较。
public class Demo01StringEquals { 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));// System.out.println(str1.equals(str3));// System.out.println(str3.equals("Hello"));// System.out.println("Hello".equals(str1));// String str4 = "hello"; System.out.println(str1.equals(str4)) System.out.println("=============="); String str5 = "abc"; System.out.println("abc".equals(str5));//推荐写法 System.out.println(str5.equals("abc"));//不推荐写法 System.out.println("==========="); String strA = "Java"; String strB = "java"; System.out.println(strA.equals(strB));//false System.out.println(strA.equalsIgnoreCase(strB));//true //注意:只有英文字母区别大小写,其他不区分大小写 System.out.println("abc一123".equalsIgnoreCase("abc壹123"));//false } }
String当中与获取相关的常用方法有:
public int length():获取字符串当中含有的字符个数。
public String concat():将当前字符串和参数字符串拼接成为返回值新的字符串。
public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始)
public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。
public class Demo02StringGet { public static void main(String[] args) { //获取字符串长度 int length = "asddjjwjjxxmjxks".length(); System.out.println("字符串的长度是"+length); //拼接字符串 String str1 = "Hello"; String str2 = "World"; String str3 = str1.concat(str2); System.out.println(str1);// Hello System.out.println(str2);// World System.out.println(str3);// HelloWorld System.out.println("==========="); //获取指定索引位置的单个字符 char ch = "Hello".charAt(1); System.out.println("在1号索引位置的字符是:"+ch); System.out.println("======================"); //查找参数字符串在本字符串当中首次出现的索引位置 String original = "HelloWorld"; int index = original.indexOf("llo");//2 System.out.println(index); System.out.println("HelloWorld".indexOf("abc"));//-1 } }
字符串的截取方法:
public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串。
public String substring(int begin,int end):截取从begin开始,到end结束,中间字符串。 备注:[begin,end)
public class Demo03Substring { public static void main(String[] args) { String str1 = "HelloWorld"; String str2 = str1.substring(5); System.out.println(str1);// HelloWorld System.out.println(str2);// World System.out.println("=============="); String str3 = str1.substring(4,7); System.out.println(str3);// oWo System.out.println("==============="); String strA = "Hello"; System.out.println(strA);// Hello strA = "Java"; System.out.println(strA);// Java } }
String当中与转换相关的常用方法有:
public char[] toCharArray():将当前字符串拆分成为字符串数组作为返回值。
public byte[] getBytes():获取当前字符串底层的字节数组。
public String replace(CharSequence oldString,CharSequence newString): 将所有出现的老字符串替换成为新的字符串,返回替换之后的结果。 备注:CharSequence意思是可以接受字符串类型。
public class Demo04StringConvert { public static void main(String[] args) { //转换成为字符数组 char[] chars = "Hello".toCharArray(); System.out.println(chars[0]); System.out.println(chars.length); System.out.println("=============="); //转换成为字节数组 byte[] bytes = "abc".getBytes(); for (int i = 0; i < bytes.length; i++) { System.out.println(bytes[i]); } System.out.println("================"); //字符串内容替换 String str = "How do you do"; String str1 = str.replace("o","*"); System.out.println(str);//How do you do System.out.println(str1);//H*w d* y*u d* System.out.println("================"); String lang1 = "会不会玩呀!你大爷的!"; String lang2 = lang1.replace("你大爷的","****"); System.out.println(lang2); } }
分隔字符串的方法:
public String[] split(String regex):按照参数的规则,将字符串切割分成若干部分。
注意事项: split方法的参数其实是一个正则表达式。 如果按照英文句号"."进行切分,必须写"\\."
public class Demo05StringSplit { 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]); } System.out.println("=============="); String str2 = "aaa bbb ccc"; String[] array2 = str2.split(" "); for (int i = 0; i < array2.length; i++) { System.out.println(array2[i]); } System.out.println("===================="); String str3 = "xxx.yyy.zzz"; // String[] array3 = str3.split("."); \\array3.length为0,切不成功。 String[] array3 = str3.split("\\."); System.out.println(array3.length); for (int i = 0; i < array3.length; i++) { System.out.println(array3[i]); } } }
(1)定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串。格式参照如下:[word1#word2#word3]
public class Demo06StringPractise { public static void main(String[] args) { int[] array = {1,2,3}; String result = fromArrayToString(array); System.out.println(result); } public static String fromArrayToString(int[] array){ String str = "["; for (int i = 0; i < array.length; i++) { if(i==array.length-1){ str+="word"+array[i]+"]"; }else{ str+="word"+array[i]+"#"; } } return str; } }
(2)键盘输入一个字符串,并且统计其中各种字符出现的次数。
种类有:大写字母,小写字母,数字,其他。
import java.util.Scanner; public class Demo07StringCount { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String input = sc.next(); int countUpper = 0;//大写字母 int countLower = 0;//小写字母 int countNumber = 0;//数字 int countOther = 0 ; char[] charArray = input.toCharArray(); for (int i = 0; i < charArray.length; i++) { char ch = charArray[i]; if ('A'<=ch && ch <='Z'){ countUpper++; }else if('a'<=ch && ch<='z'){ countLower++; }else if('0'<=ch && ch<='9'){ countNumber++; }else{ countOther++; } } System.out.println("大写字母有:"+countUpper); System.out.println("小写字母:"+countLower); System.out.println("数字:"+countNumber); System.out.println("其他"+countOther); } }