String的概述和一些常见的用法

tech2023-12-19  79

java.lang.String类代表字符串。 API当中说:Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。 其实就是说:程序当中所有的双引号字符串,都是String类的对象。(就算没有new,也照样是。)

字符串的特点:

字符串的内容永不可变。【重点】正是因为字符串不可改变,所以字符串是可以共享使用的。字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。

创建字符串的常见3+1种方式。 三种构造方法: public String():创建一个空白字符串,不含有任何内容。 public String(char[] array):根据字符数组的内容,来创建对应的字符串。 public String(byte[] array):根据字节数组的内容,来创建对应的字符串。 一种直接创建: 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("第2个字符串:" + str2);//ABC //根据字节数组来创建字符串 byte[] byteArray = {97,98,99}; String str3 = new String(byteArray); System.out.println("第三个字符串是:"+str3);//abc //直接创建: String str4 = "Hello"; System.out.println("第四个字符串是:"+str4);//Hello } }

字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。

对于基本类型来说,“”是进行数值的比较。 对于引用类型来说,“”是进行【地址值】的比较。

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 } }

比较字符串的方法:

==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法:

public boolean equals(Object obj):参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true;否则返回false。 注意事项:

任何对象都能用Object进行接收。equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。如果比较双方一个常量一个变量,推荐把常量字符串写在前面。 推荐:“abc”.equals(str) 不推荐:str.equals(“abc”)

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));//true System.out.println(str1.equals(str3));//true System.out.println("Hello".equals(str3));//true System.out.println("hello".equals(str3));//false System.out.println("==============="); //如果比较双方一个常量一个变量,推荐把常量字符串写在前面。 //推荐:"abc".equals(str) 不推荐:str.equals("abc") String str5 = null; System.out.println("abc".equals(str5)); // 推荐:false // System.out.println(str5.equals("abc")); // 不推荐:报错,空指针异常NullPointerException System.out.println("================="); //public boolean equalsIgnoreCase(String str):忽略大小写,进行内容比较。 String str6 = "Java"; String str7 = "java"; System.out.println(str6.equals(str7));//true System.out.println(str6.equalsIgnoreCase(str7));//false } }

String当中与获取相关的常用方法有:

public int length():获取字符串当中含有的字符个数,拿到字符串长度。 public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串。 public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始。) public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。

public class Demo02StringGet { public static void main(String[] args) { //获取字符串长度 int length = "xdtcyvgubhkml".length(); System.out.println("字符串的长度是:"+length);//13 System.out.println("===================="); //拼接字符串 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 = "你好我是谁".charAt(3); System.out.println("在三号索引位置的字符是:"+ch);//是 System.out.println("===================="); //查找参数字符串在本来字符串当中出现的第一次索引位置 //如果没有,就返回-1 String original = "qwertyuiop"; int index1 = original.indexOf("yu"); System.out.println("yu第一次索引值是:"+index1);//5 int index2 = original.indexOf("ss"); System.out.println("ss第一次索引值是:"+index2);//-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("============"); //截取从begin开始,一直到end结束,中间的字符串。 String str3 = str1.substring(2,5); System.out.println(str3);//llo // 下面这种写法,字符串的内容仍然是没有改变的 // 下面有两个字符串:"Hello""Java" // strA当中保存的是地址值。 // 本来地址值是Hello的0x666, // 后来地址值变成了Java的0x999 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) { String str1 = "Java,你好"; // 转换成为字符数组 char[] chars = str1.toCharArray(); System.out.println(chars);//Java,你好 System.out.println(chars[1]);//a System.out.println(chars.length);//7 // 转换成为字节数组 byte[] bytes = str1.getBytes(); System.out.println(bytes);//[B@1540e19d (返回的是地址值) System.out.println(bytes[2]);//118 //也可以遍历一下 for (int i = 0; i < bytes.length; i++) { System.out.println(bytes[i]); } // 字符串的内容替换 String str2 = "helloWorld"; String str3= str2.replace("l","*"); System.out.println(str3);//he**oWor*d } }

分割字符串的方法: 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]); }

//也可以根据空格进行分割 String str2 = "AAA BBB CCC"; String[] array2 = str1.split(" "); for (int i = 0; i < array2.length; i++) { System.out.println(array2[i]); } //再根据“ . ”进行分割时有些许不同 //如果按照英文句点“.”进行切分,必须写"\\."(两个反斜杠) String str3 = "AAA。BBB.CCC"; String[] array3 = str1.split("//.");//需要把 . 变成 //. for (int i = 0; i < array3.length; i++) { System.out.println(array3[i]); } }

}

有关的两个练习题: 题目1: 定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串。 格式参照如下:[word1#word2#eord3]

分析:

首先准备一个int[]数组,内容是:1、2、3定义一个方法,用来将数组变成字符串 三要素 返回值类型:String 方法名称:fromArrayToString 参数列表:int[]格式:[word1#word2#word3] 用到:for循环、字符串拼接、每个数组元素之前都有一个word字样、分隔使用的是#、区分一下是不是最后一个调用方法,得到返回值,并打印结果字符串 public class Demo06StringPractice { public static void main(String[] args) { int[] array = new int[]{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: 键盘输入一个字符串,并且统计其中各种字符出现的次数。 种类有:大写字母、小写字母、数字、其他

思路:

既然用到键盘输入,肯定是Scanner键盘输入的是字符串,那么:String str = sc.next();定义四个变量,分别代表四种字符各自的出现次数。需要对字符串一个字、一个字检查,String–>char[],方法就是toCharArray()遍历char[]字符数组,对当前字符的种类进行判断,并且用四个变量进行++动作。打印输出四个变量,分别代表四种字符出现次数。 public class Demo07StringCount { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); int countUpper = 0; int countLower = 0; int countNumber = 0; int countOther = 0; char[] charArray = str.toCharArray(); for (int i = 0; i < charArray.length; i++) { char ch = charArray[i]; if('A'<=ch && 'Z'>=ch ){ countUpper++; }else if('a'<=ch && 'z'>=ch){ countLower++; }else if('0'<=ch && '9'>=ch){ countNumber++; }else{ countOther++; } } System.out.println(countUpper); System.out.println(countLower); System.out.println(countNumber); System.out.println(countOther); } }
最新回复(0)