JavaSE基础之 String&&常用API

    科技2022-08-01  116

    字符串

    一、API

    1)API概述:API(Application Programming Interface):应用程序编程接口

    例子:编写一个机器人程序去控制机器人踢足球,程序需要向机器人发出向前跑、向后跑、射门、抢球等各种命令。机器人厂商一定会提供一些用于控制机器人的接口类。这些类中定义好了机器人各种动作的方法。其实,这些接口类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为API

    2)Java API:指的就是JDK中提供的各种功能的Java类

    3)如何使用帮助文档:打开帮助文档——找到索引选项卡中的输入框(查找)——在输入框中输入类(API)——看类在哪个包下(对应使用时的导包动作,但java.lang不用导包)——看类的描述——看构造方法——看成员方法

    4)API使用练习

    按照帮助文档的使用步骤学习Scanner类的使用,并实现键盘录入一个字符串,最后输出在控制台

    范例:

    package Test; import java.util.Scanner; public class Test { public static void main(String[]args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一条字符串:"); String s = sc.nextLine(); //ctrl+alt+v可以自动生成左边 System.out.println(s); } }

    二、String

    1)String概述:使用String时不需要导包,因为它在java.lang包下; String类代表字符串,java程序中的所有字符串文字(例如”abc”)都被实现为此类的实例,也就是说,Java程序中所有的双引号字符串,都是String类的对象

    2)字符串的特点:

    字符串不可变,它们的值在创建后不能被更改;虽然String的值是不可变的,但是它们可以被共享;字符串效果上相当于字符数组(char[ ]),但原理上是字节数组([ ])

    3)常用的String构造方法

    方法名说明public String()创建一个空白字符串对象,不含有任何内容public String(char[] chs)根据字符数组的内容,来创建字符串对象public String(byte[]bys)根据字节数组的内容,来创建字符串对象String = “abc” ;直接赋值的方式创建字符串对象,内容就是abc

    范例:

    package Test; public class Test { public static void main(String[]args) { //public String(); String s1 = new String(); System.out.println("s1:"+s1); //public String(char[] chs) char[] chs = {'a','b','c'}; String s2 = new String(chs); System.out.println("s2:"+s2); //public String(byte[] bys) byte[] bys = {97,98,99}; String s3 = new String(bys); System.out.println("s3:"+s3); //String s = "abc";推荐使用直接赋值法 String s4 = "abc"; System.out.println("s4:"+s4); } }

    4)String对象的特点 通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容想相同,但是地址值不同 但是,用” ”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护,也就是说s2 = "abc"; s3 = "abc"; ,本质上是同一个对象

    范例:

    package Test; public class Test{ public static void main(String[] args) { char[] chs = {'a','b','c'}; String s1 = new String(chs); String s2 = new String(chs); System.out.println(s1 == s2);//输出false String s3 = "abc"; String s4 = "abc"; System.out.println(s3 == s4);//输出true } }

    5)字符串的比较

    使用 == 作比较:基本类型比较的是数据值是否相同;引用类型比较的是地址值是否相同,以上得知,字符串用==比较时是比较地址值

    字符串是对象,它比较内容是否相同时,是通过一个方法来实现的,这个方法叫做equals()

    public boolean equals(Object anObject):将此字符串与指定对象进行比较,由于我们比较的是字符串对象,所以参数直接传递一个字符串

    范例:

    package Test; public class Test{ public static void main(String[] args) { char[] chs = {'a','b','c'}; String s1 = new String(chs); String s2 = new String(chs); System.out.println(s1.equals(s2)); String s3 = "abc"; String s4 = "abc"; System.out.println(s3.equals(s4)); } }

    6)案例分析:用户登录 已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示

    范例:

    package Test; import java.util.Scanner; public class Test{ public static void main(String[] args) { String user1 = "kryze"; String psw = "psw123"; Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String s1 = sc.nextLine(); System.out.println("请输入密码:"); for(int i = 0; i < 3; i++){ String s2 = sc.nextLine(); if(s2.equals(psw)){ System.out.println("密码输入正确"); break; } if(i == 2){ System.out.println("密码输入错误次数达到三次,请稍后再试"); break; } System.out.println("密码输入错误,请重新输入,你还有"+(2-i)+"次机会"); } } }

    7)案例分析:遍历字符串 键盘录入一个字符串,使用程序实现在控制台遍历该字符串

    遍历字符串,首先要能够获取字符串中的每一个字符:

    public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的

    范例:

    package Test; import java.util.Scanner; public class Test{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String s1 = sc.nextLine(); System.out.println("遍历该字符串得到:"); for (int i = 0; i<s1.length();i++){ System.out.print(s1.charAt(i)+"、"); } } }

    Tip:数组长度: 数组.length 字符串长度: 字符串.length()

    8)案例分析:统计字符次数: 键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数

    范例:

    package Test; import java.util.Scanner; public class Test{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String s1 = sc.nextLine(); int sw = 0;//小写字母 int bw = 0; //大写字母 int num = 0; //数字 for (int i = 0; i<s1.length();i++){ if(s1.charAt(i)>='A'&&s1.charAt(i)<='Z'){ bw++; }else if(s1.charAt(i)>='a'&&s1.charAt(i)<='z'){ sw++; }else num++; } System.out.println("你输入的字符串有 "+bw+" 个大写字母, "+sw+" 个小写字母和 "+num+" 个数字"); } }

    9)案例分析:拼接字符串 定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。

    例如,数组为int[] arr = {1,2,3}; 执行方法后的输出结果为:[1,2,3]

    范例:

    package Test; public class Test{ public static void main(String[] args) { int[] arr = {1,2,3,4,6,7}; String s1 = arrayToString(arr); System.out.println(s1); } public static String arrayToString(int[] arr){ String s = "["; for (int i = 0; i< arr.length;i++) { if (i == arr.length - 1) { s += arr[i]; }else{ s += arr[i]; s +=" , "; } } s+="]"; return s; } }

    10)案例分析:字符串反转 定义一个方法,实现字符串的反转。键盘录入一个字符串,调用该方法后,在控制台输出结果。例如,键盘录入abc,输出结果为cba

    范例:

    package Test; import java.util.Scanner; public class Test{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String line = sc.nextLine(); reverseStr(line); } public static void reverseStr(String line){ System.out.println("反转后的字符串是:"); for(int i = 0;i<line.length();i++){ System.out.print(line.charAt(line.length()-1-i)); } } }

    三、StringBuilder

    1)StringBuilder概述:例如,如果对字符串进行拼接操作,用“+”,每次都会构建一个新的String对象用于拼接,既耗时,又浪费内存空间,而这种操作还不可避免。这个时候,我们就需要用Java提供的StringBuilder类来解决这个问题。

    StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的

    2)String和StringBuilder的区别:String是不可变的,StringBuilder是可变的

    3)StringBuilder构造方法

    方法名说明public StringBuilder()创建一个空白可变字符串对象,不含有任何内容public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象

    例子:

    public class Test{ public static void main(String[] args) { StringBuffer sb = new StringBuffer(); System.out.println("sb:"+sb); StringBuffer sb1 = new StringBuffer("abc"); System.out.println("sb1:"+sb1); } }

    4)StringBuilder的添加和反转方法

    方法名说明public StringBuilder append(任意类型)添加数据,并返回对象本身(链式编程)public StringBuilder reverse()返回相反的字符序列

    例子:

    public class Test{ public static void main(String[] args) { StringBuilder sb1 = new StringBuilder("Hello"); sb1.append("world"); sb1.append(100); sb1.append("Kryze"); //链式编程 StringBuilder sb2 = new StringBuilder(); sb2.append("Hello").append("world").append(100).append("Kryze"); System.out.println(sb1); System.out.println(sb2); sb2.reverse(); System.out.println(sb2); } }

    5)StringBuilder和Stirng相互转换

    StringBuilder转换为String:toString() String转换为StringBuilder: 通过构造方法即可 : StringBuilder(String s)

    6)案例分析:用append()进行数组的重写

    范例:

    package Test; public class Test{ public static void main(String[] args) { int[] arr = {1,2,3}; String s = addStr(arr); System.out.println(s); } public static String addStr(int[] arr){ StringBuilder sb = new StringBuilder(); sb.append("["); for(int i = 0; i<arr.length;i++){ if(i == arr.length-1){ sb.append(arr[i]); }else{ sb.append(arr[i]); sb.append(" , "); } } sb.append("]"); String s = sb.toString(); return s; } }

    7)案例分析:通过链式编程实现字符串的反转

    范例:

    package Test; import java.util.Scanner; public class Test{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String line = sc.nextLine(); System.out.println("该字符串反转后是:"); System.out.println(reverseStr(line)); } public static String reverseStr(String s){ //匿名对象的链式编程 return new StringBuilder(s).reverse().toString(); } }
    Processed: 0.014, SQL: 8