1.API
应用程序接口
Java API:指的就是JDK 中提供的各种功能的Java类这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
2. String
String 类在java.lang 包下,所以使用的时候不需要导包
String 类代表字符串,Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实也就是说,Java 程序中所有的双引号字符串,都是String 类的对象
字符串的特点
字符串不可变,它们的值在创建后不能被更改
虽然 String的值是不可变的,但是它们可以被共享
字符串效果上相当于字符数组( char[]),但是底层原理是字节数组( byte[])
3.String 构造方法
package Base_one.Base_008;public class StringDemo1 {public static void main(String[] args) {String s1 = new String();System.out.println(s1); // 空的// public String(char[] chs) 根据字符数组的内容 创建字符串对象char[] chs ={'a','b','c'};String s2 = new String(chs); //String方法传进去一个字符数组System.out.println(s2);//public string(byte[] bys):根据字节数组的内容,来创建字符串对象byte[] bys = {97,2,3};byte[] bys1 = {97,98,99};String s3 = new String(bys);System.out.println(s3); // aString s4 = new String(bys1);System.out.println(s4); // abcString s5 = "abc";System.out.println(s5);}
}
4. String 对象的特点
通过 new 创建的字符串对象,每一次 new都会申请一个内存空间,虽然内容相同,但是地址值不同
char[]chs ={'a','b''c'}i
string sl=new string(chs);
string s2=new string(chs);
上面的代码中,JVM会首先创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相同的
2)以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个String 对象,并在字符串池中维护
String s3="abc";
String s4="abc";
在上面的代码中,针对第一行代码,JVM 会建立一个String对象放在字符串池中,并给s3 参考;第二行则让s4 直接参考字符串池中的Strinq对象,也就是说它们本质上是同一个对象。
package Base_one.Base_008;public class String_object {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// 比较字符串的地址是否相同System.out.println(s1==s3); //false}
}
5.字符串的比较
package Base_one.Base_008;public class StringDemo02 {public static void main(String[] args) {char[] chs = {'a','b','c'};String s1 = new String(chs);String s2 = new String(chs);String s3 = "abc";String s4 = "abc";// 比较字符串对象的地址值是否相同System.out.println(s1==s2); //falseSystem.out.println(s1==s3); //flaseSystem.out.println(s3==s4); //trueSystem.out.println("----");//比较字符串内容是否相同System.out.println(s1.equals(s2)); //trueSystem.out.println(s1.equals(s3)); //trueSystem.out.println(s3.equals(s4)); //true}
}
6. 用户登录
package Base_one.Base_008;import java.util.Scanner;
import java.util.stream.Stream;public class StringTest01 {public static void main(String[] args) {String user = "user";String pwd = "a123456";Scanner scanner = new Scanner(System.in);System.out.println("请输入用户名:");String username = scanner.nextLine();System.out.println("请输入密码:");String password = scanner.nextLine();StringTest01 test01 = new StringTest01();int cout=0;for(int i=0;i<3;i++){if(username.equals(user) && (password.equals(pwd))){System.out.println("正确");break;}else {System.out.println("第"+(i+1)+"次输入不对,重新输入");System.out.println("还有"+(2-i)+"次机会");if ((2-i)==0){System.out.println("三次机会使用完毕!");break;}else {
// username = usr.nextLine();
// password = pw.nextLine();username = test01.userInput(username);password = test01.pwdInput(password);}}}}public String userInput(String username){Scanner usr = new Scanner(System.in);String u = usr.nextLine();return u;}public String pwdInput(String password){Scanner pw = new Scanner(System.in);String p = pw.nextLine();return p;}
}
7.遍历字符串
package Base_one.Base_008;import java.util.Scanner;public class StringYest02 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串");String line = sc.nextLine();for (int i = 0;i<line.length();i++){System.out.print(line.charAt(i)+" ");}}
}
8. 统计字符次数
package Base_one.Base_008;import java.util.Scanner;public class StringTest03 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入一个字符串");String line = sc.nextLine();int D = 0;int X = 0;int number = 0;for (int i= 0;i<line.length();i++){char ch = line.charAt(i);if (ch>='A' && ch<='Z'){D++;} else if (ch>='a' && ch<='z') {X++;} else if (ch>='0' && ch<='9') {number++;}else { // 其他字符的情况continue;}}System.out.println(D);System.out.println(X);System.out.println(number);}
}
8. 拼接字符串
package Base_one.Base_008;public class StringTest005 {public static void main(String[] args) {int[] arr = {1, 2, 3};System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {System.out.print(arr[i]); // 注意这里使用空格而不是加号} else {System.out.print(arr[i] + ","); // 注意这里使用空格而不是加号}}System.out.print("]");System.out.println();System.out.println("-------");String line = araytoString(arr);System.out.println(line);}public static String araytoString(int[] arr) {String s = "";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;}
}
9.字符串反转
package Base_one.Base_008;import java.util.Scanner;public class StringDemo06 {public static void main(String[] args) {
// String s = "abc";Scanner sc = new Scanner(System.in);System.out.println("输入一个字符串");String s = sc.nextLine();System.out.println(s);System.out.println("---");String ss = reverseString(s);System.out.println(ss);}public static String reverseString(String l) {String line = "";for (int i = l.length()-1; i>=0 ; i--){line += l.charAt(i);}return line;}}
10.String中的方法
11. StringBuilder
StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器。这里的可变指的是StringBuilder对象中的内容是可变的。
String 和 StringBuilder 的区别:
String:内容是不可变的
StringBuilder:内容是可变的
12.StringBuilder 构造方法
package Base_one.Base_008;public class StringBuilderDemo {public static void main(String[] args) {// 创建一个空的可变字符串对象,不含有任何内容。StringBuilder sb = new StringBuilder();System.out.println(sb); //System.out.println(sb.length()); // 0StringBuilder sb2 = new StringBuilder("hello");System.out.println(sb2); //helloSystem.out.println(sb2.length()); //5}
}
13 StringBuilder 的添加和反转方法
package Base_one.Base_008;public class StringBuilderDemo1 {public static void main(String[] args) {StringBuilder sb = new StringBuilder();//public stringBuilder append(任意类型):添加数据,并返回对象本身//public stringBuilder reverse():返回相反的字符序列
// StringBuilder sb2 = sb.append("hello"); // 返回对象本身
// System.out.println(sb);
// System.out.println(sb2);
// System.out.println(sb==sb2); //
// sb.append("hello");
// sb.append(123);
// System.out.println(sb);// 链式法则sb.append("hello").append(134); // 可以一直调用方法System.out.println(sb); //hello134sb.reverse();System.out.println(sb); //hello134}
}
13 String 和 StringBuilder 相互转换
package Base_one.Base_008;public class Reverse {public static void main(String[] args) {
// StringBuilder sb = new StringBuilder();
// sb.append("hello");String s = sb;// 类型不一样
// String s = sb.toString(); // 利用toString()方法
// System.out.println(s);// 转换为StringBUilderString s = "hello";StringBuilder sb = new StringBuilder(s);System.out.println(sb);}
}
14 拼接字符串
package Base_one.Base_008;public class Test {public static void main(String[] args) {int[] arr = {1,2,3};String s = arrtoString(arr);System.out.println(s);}public static String arrtoString(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]);sb.append("]");}else{sb.append(arr[i]).append(",");}}String s = sb.toString();return s;}
}
15.字符串反转升级版
package Base_one.Base_008;import java.util.Scanner;public class Test02 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("输入一个字符串");String s = scanner.nextLine();System.out.println(s);String ss = reverseString(s);System.out.println(ss);}public static String reverseString(String s){// 将接收到的字符串转为StringBuilder类型
// StringBuilder sb = new StringBuilder(s);
// sb.reverse();
// // 再转化为String
// String ss = sb.toString();
// return ss;// 将上面的四步一步完成String ss = new StringBuilder(s).reverse().toString();return ss;}
}