大家好!我是小笙!我以后想走的方向是Java后端开发的工程师,我最近想要进一步深入学习Java,主要是想巩固基础,所以想和大家一起来谈谈Java.同时我再次申明以下内容是我通过学习黑马程序猿等视频的总结,但是都是纯手打和加入个人的总结!这次我探讨的是字符串有关的知识点
我知道很多初学者对API这个概念还是很不理解!所以今天我来说一说
API(Application Programming Interface,应用程序接口)
指的是JDK中提供的各种功能功能java类,这些类将底层的实现封装了起来,我们不关心怎么实现的,我们的更加关心如何去使用!
Java 11在线中文文档
你可以下载jdk的官方文档去下载!我觉得是非常有用的!建议!
学会看API文档对程序员来说很重要!很重要!很重要!!
很多方法,你都可以尝试,我举一例:
package javase_Scanner_use; import java.util.Scanner; /** * @author Al_tair * @date 2021/6/29-21:33 */ /** * Scanner : 用于获取键盘录入数据( primitive types and strings) * public String nextLine(); 获取键盘录入的字符串数据 * Advances this scanner past the current line and returns the input that was skipped. * This method returns the rest of the current line, excluding any line separator at the end. * The position is set to the beginning of the next line. * * 注意: * 调用方法的时候,如果方法有明确的返回值,我们用变量接受可以手动完成 * 也可以使用快捷键(Ctrl+Alt+V) */ public class ScannerDemo { public static void main(String[] args) { // 创建对象 Scanner sc = new Scanner(System.in); // 接受数据 System.out.print("输入一段字符串:"); String string = sc.nextLine(); // 输出结果 System.out.println("输入的字符串:"+string); } }
/** * String 概述 * The String class represents character strings. * All string literals in Java programs,such as "abc", * are implemented as instances of this class. * 意思是:String类代表字符串 ,所有"..."都是String类的实现对象 */
/** * String 对象的特点 */ /** * 1.通过new创建的对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值是不相同的,因为是两个对象 * System.identityHashCode(S1) 只能确定引用的不同,不能用于查询内存地址,只是对象的唯一标识符号 */ char[]ch = {'A','l','_','t','a','i','r'}; String S1 = new String(ch); String S2 = new String(ch); System.out.println(System.identityHashCode(S1)); System.out.println(System.identityHashCode(S2)); System.out.println("**********************************"); /** * 2.直接赋值方式的字符串,只要字符内容相同,无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池进行维护 * 2.0 解释一下字符串池的概念 位置是在方法区的常量池中 * 2.1在JVM层面为字符串提供字符串常量池,可以理解为是一个缓存区; * 2.2创建字符串常量时,JVM会检查字符串常量池中是否存在这个字符串; * 2.3若字符串常量池中存在该字符串,则直接返回引用实例;若不存在,先实例化该字符串, * 并且,将该字符串放入字符串常量池中,以便于下次使用时,直接取用,达到缓存快速使用的效果。 */ String S3 = "AL_tair"; String S4 = "AL_tair"; System.out.println(System.identityHashCode(S3)); System.out.println(System.identityHashCode(S4));
1.做==比较
2.比较字符串的值是否相同,是用一个方法实现的:equals()
代码的实现
package javase_String_use; import java.sql.SQLOutput; /** * @author Al_tair * @date 2021/6/30-16:11 */ public class StringCompare { /** * 字符串的地址和数据的比较实现 */ public static void main(String[] args) { // 构造方法获得对象 char[]c = {'A','l','_','t','a','i','r'}; String S1 = new String(c); String S2 = new String(c); // 直接赋值的方式获得对象 String S3 = "Al_tair"; String S4 = "Al_tair"; // 比较字符串地址是否相同 System.out.println(S1==S2); System.out.println(S1==S3); System.out.println(S3==S4); System.out.println("**********************************"); // 比较字符串数据是否相同 System.out.println(S1.equals(S2)); System.out.println(S1.equals(S3)); System.out.println(S3.equals(S4)); } }
需求:已知用户名和密码,请用程序实现模拟用户登入,总共给三次机会,登入之后,给出相应的提示信息
思路:
1.已知用户名和密码,定义两个字符串即可
2.键盘录入要登入的用户名和密码,Scanner实现
3.拿键盘录入的用户名,密码与已知的用户名和密码进行比较,给出相应的提示。比较用方法.equals()实现
用循环实现多次机会,使用break结束循环
package javase_String_Test; import java.util.Scanner; /** * @author Al_tair * @date 2021/7/2-20:04 */ public class StrgingTest { /** * 案例:用户登录 * * 需求:已知用户名和密码,请用程序实现模拟用户登入,总共给三次机会,登入之后,给出相应的提示信息 * 思路: * 1.已知用户名和密码,定义两个字符串即可 * 2.键盘录入要登入的用户名和密码,Scanner实现 * 3.拿键盘录入的用户名,密码与已知的用户名和密码进行比较,给出相应的提示。比较用方法.equals()实现 * 4.用循环实现多次机会,使用break结束循环 */ public static void main(String[] args) { // 1.已知用户名和密码,定义两个字符串就可以了 String Username = "Al_tair"; String Password = "I love Java"; // 2.键盘录入要登入的用户名和密码,Scanner实现 for (int i = 0; i < 3; i++) { System.out.println("***********************************************"); System.out.print("请输入用户名:"); Scanner sc = new Scanner(System.in); String username = sc.nextLine(); System.out.print("请输入密码:"); String password = sc.nextLine(); // 3.拿键盘录入的用户名,密码与已知的用户名和密码进行比较 if(Username.equals(username) && Password.equals(password)) { System.out.println("登入成功"); break; }else if(i == 3){ System.out.println("登入失败,没有尝试机会了!!"); }else { System.out.println("登入失败,你还有"+(2-i)+"次机会"); } System.out.println("***********************************************"); } } }
需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
思路:
1.键盘录入一个字符串用Scanner实现
2.遍历字符串,首先能够获取到字符串中的每一个字符 public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始
3.遍历字符串,其次要能够获取到字符串的长度 public int length():返回此字符串的长度 数组的长度:数组名.length 字符串的长度: 字符串对象.length()
4.遍历字符串的通用格式 for(int i=0;i<s.length();i++){
s.charAt(i); //就是指定索引处的字符值 }
package javase_String_traversal; import java.util.Scanner; /** * @author Al_tair * @date 2021/7/15-23:07 */ public class StringTraversal { /** * 需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串 * 思路: * 1.键盘录入一个字符串用Scanner实现 * 2.遍历字符串,首先能够获取到字符串中的每一个字符 * public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始 * 3.遍历字符串,其次要能够获取到字符串的长度 * public int length():返回此字符串的长度 * 数组的长度:数组名.length * 字符串的长度: 字符串对象.length() * 4.遍历字符串的通用格式 * for(int i=0;i<s.length();i++){ * s.charAt(i); //就是指定索引处的字符值 * } */ public static void main(String[] args) { // 1.键盘录入一个字符串用Scanner实现 System.out.print("请输入一个字符串:"); Scanner sc = new Scanner(System.in); String string = sc.nextLine(); // 2.遍历字符串,首先能够获取到字符串中的每一个字符 // 3.遍历字符串,其次要能够获取到字符串的长度 for (int i = 0; i < string.length(); i++) { System.out.println("第"+(i+1)+"个字符是:"+string.charAt(i)); } } }
需求:键盘录入一个字符串,统计字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
思路:
1.键盘录入一个字符串,用Scanner实现
2.要统计三种类型的字符个数,需定义三个统计变量,初始值为0
3.遍历字符串,得到每一个字符
4.判断该字符属于哪种类型,然后对应类型的统计变量+1
5.输出三种类型的字符个数
package javase_String_count; import java.util.Scanner; /** * @author Al_tair * @date 2021/7/19-12:58 */ public class StringCount { /** * 需求:键盘录入一个字符串,统计字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符) * 思路: * 1.键盘录入一个字符串,用Scanner实现 * 2.要统计三种类型的字符个数,需定义三个统计变量,初始值为0 * 3.遍历字符串,得到每一个字符 * 4.判断该字符属于哪种类型,然后对应类型的统计变量+1 * 5.输出三种类型的字符个数 */ public static void main(String[] args) { // 1.键盘录入一个字符串,用Scanner实现 Scanner sc = new Scanner(System.in); System.out.println("请输入字符串:"); String string = sc.nextLine(); // 2.要统计三种类型的字符个数,需定义三个统计变量,初始值为0 int CountA = 0,Counta = 0,Count0 = 0; // 3.遍历字符串,得到每一个字符 // 4.判断该字符属于哪种类型,然后对应类型的统计变量+1 for (int i = 0; i < string.length(); i++) { if(string.charAt(i) >= 'A' && string.charAt(i) <= 'Z'){ CountA++; }else if(string.charAt(i) >= 'a' && string.charAt(i) <= 'z'){ Counta++; }else if(string.charAt(i) == (int)string.charAt(i) ){ Count0++; } } // 5.输出三种类型的字符个数 System.out.println("大写字母字符个数:"+CountA); System.out.println("小写字母字符个数:"+Counta); System.out.println("数字字符个数:"+Count0); } }
需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果
思路:
1.定义一个int了类型的数组,用静态初始化完成数组元素的初始化
2.定义一个方法,用于把int数组中的数据按照指定格式拼接成一个字符串返回,返回类型String,参数列表int[] arr
3.在方法中遍历数组,按照要求进行拼接
4.调用方法,用一个变量接收数据
5.输出结果
package javase_String_concat; /** * @author Al_tair * @date 2021/7/19-15:32 */ public class StringConcat { /** * 需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果 * 思路: * 1.定义一个int了类型的数组,用静态初始化完成数组元素的初始化 * 2.定义一个方法,用于把int数组中的数据按照指定格式拼接成一个字符串返回,返回类型String,参数列表int[] arr * 3.在方法中遍历数组,按照要求进行拼接 * 4.调用方法,用一个变量接收数据 * 5.输出结果 */ public static void main(String[] args) { // 1.定义一个int了类型的数组,用静态初始化完成数组元素的初始化 int []arr = {1,2,3,4,5}; // 4.调用方法,用一个变量接收数据 // 5.输出结果 String string = concat(arr); System.out.println(string); } // 2.定义一个方法,用于把int数组中的数据按照指定格式拼接成一个字符串返回,返回类型String,参数列表int[] arr public static String concat(int []arr) { String sum = "["; for (int i = 0; i < arr.length; i++) { sum += arr[i]; if(i != arr.length-1) sum += ","; else{ sum += "]"; } } return sum; } }
需求:定义一个方法,实现字符串的反转。键盘录入一个字符串,调用该方法后,在控制台输出结果
思路:
1.键盘录入一个字符串,用Scanner实现
2.定义一个方法,实现字符串反转。返回值类型String,参数String s
3.在方法中把字符串倒着遍历,然后把每一个得到的字符拼接成一个字符串并返回
4.调用方法,用一个变量接收结果
5.输出结果
package javase_String_invert; import java.util.Scanner; /** * @author Al_tair * @date 2021/7/19-16:21 */ public class StringInvert { /** * 需求:定义一个方法,实现字符串的反转。键盘录入一个字符串,调用该方法后,在控制台输出结果 * 思路: * 1.键盘录入一个字符串,用Scanner实现 * 2.定义一个方法,实现字符串反转。返回值类型String,参数String s * 3.在方法中把字符串倒着遍历,然后把每一个得到的字符拼接成一个字符串并返回 * 4.调用方法,用一个变量接收结果 * 5.输出结果 */ public static void main(String[] args) { // 1.键盘录入一个字符串,用Scanner实现 Scanner sc = new Scanner(System.in); System.out.print("请输入一个字符串:"); String string = sc.nextLine(); // 4.调用方法,用一个变量接收结果 // 5.输出结果 string = invert(string); System.out.println(string); } // 2.定义一个方法,实现字符串反转。返回值类型String,参数String s // 3.在方法中把字符串倒着遍历,然后把每一个得到的字符拼接成一个字符串并返回 public static String invert(String s){ String sum = ""; for (int i = s.length()-1; i >= 0;i--) { sum += s.charAt(i); } return sum; } }
StringBuilder 是一个可变的字符串类,我们把它看成是一个容器,这里的可变指的是StringBuilder对象的内容是可变的
详情见API文档
public StringBuilder append(); // 链式编程 StringBuilder strb = new StringBuilder(); strb.append("hello ").append("world! ").append(Java!);
public StringBuilder reverse();
// 通过toString()就实现把StringBuilder转换成String public String toString();
// 通过构造方法就可以实现把String转换成StringBuilder public StringBuilder(String s)
package javase_StringBuilder_String; /** * @author Al_tair * @date 2021/7/20-13:26 */ public class StringBuilderTurn { /** * 通过toString()就实现把StringBuilder转换成String * public String toString(); * 通过构造方法就可以实现把String转换成StringBuilder * public StringBuilder(String s) */ public static void main(String[] args) { // StringBuilder 转换成 String StringBuilder sb = new StringBuilder(); sb.append("hello ").append("world!"); String s = sb.toString(); System.out.println(s); // String 转换成 StringBuilder String s1 = new String("I Love Java!"); StringBuilder sb1 = new StringBuilder(s1); sb1.append(" Please Join me!"); System.out.println(sb1); } }