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); // a
String s4 = new String(bys1);
System.out.println(s4); // abc
String 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); //false
System.out.println(s1==s3); //flase
System.out.println(s3==s4); //true
System.out.println("----");
//比较字符串内容是否相同
System.out.println(s1.equals(s2)); //true
System.out.println(s1.equals(s3)); //true
System.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:内容是可变的