-
API
API (Application Programming Interface) :应用程序编程接口(调用别人写好的东西,不用自己编写直接使用)
API帮助文档:
指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
字符串
String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。
String
特点:
-
字符串不可变,它们的值在创建后不能被更改
-
虽然 String 的值是不可变的,但是它们可以被共享
-
字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )
创建方式:
- 直接赋值
String s1 = "abc";
- new
String s1 = new String();
方法名 | 说明 |
---|---|
public String() | 创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
String s = “abc”; | 直接赋值的方式创建字符串对象,内容就是abc |
public class StringDemo01 {
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”; 直接赋值的方式创建字符串对象,内容就是abc
String s4 = "abc";
System.out.println("s4:" + s4);
}
}
-
通过构造方法创建
通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
直接赋值方式创建
- 以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池( 在堆空间中)中维护
1.双引号赋值时:用双引号直接赋值时,系统会检查该字符串在字符串池中是否存在。
- 不存在:创建新的
- 存在:复用
2.使用new的方式创建:
会在堆空间创建新的小空间,记录的地址不同,相同的字符串过多会浪费内存空间
常用方法:
比较:
"=":
- 基本数据类型:比较的是具体的数据值
- 引用数据类型:比较的是地址值
字符串比较:
- boolean equals(要比较的字符串)
完全一样的结果返回true,否则false
- boolean equalsIgnoreCase(要比较的字符串)
忽略大小写比较
package day11;
public class Test1 {
public static void main(String[] args) {
String a1 = "abc";
String a2 = "abc";
String a3 = new String("abc");
String a4 = new String("ABC");
System.out.println(a1 == a2);//true
System.out.println(a1 == a3);//false
System.out.println("equals:"+a1.equals(a3));//true
System.out.println("equalsIgnoreCase:"+a3.equalsIgnoreCase(a4));//true 忽略大小写比较
}
}
案例:
用户登录:
package day11;
import java.util.Scanner;
public class UserLogin {
public static void main(String[] args) {
String rightusername = "cxk";
String rightpassWord = "cxk2580";
for (int i = 0; i < 3; i++) {
Scanner sc = new Scanner(System.in);
System.out.println("username:");
String username = sc.next();
System.out.println("password:");
String password = sc.next();
if (username.equals(rightusername) && password.equals(rightpassWord)) {
System.out.println("login success!");
break;
} else {
if (i == 2){
System.out.println("user locked");
}else{
System.out.println("login false"+" try"+(2-i)+"reLogin");
}
}
}
}
}
字符串遍历:
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("input string:");
String str = sc.next();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
System.out.println(i+" :"+ch);
}
}
}
截取:
将字符串的起始位置和截至位置截取(包头不包尾,前闭后开)
String substring(int beginindex,int endindex)
例子:
public class PhoneNumber {
public static void main(String[] args) {
String phoneNumber = "15399163947";
String start = phoneNumber.substring(0,4);
String end = phoneNumber.substring(7);
String result = start+"****"+end;
System.out.println(result);
}
}
替换:
将字符串中的值替换成一个新的字符串
String replace(old,new);
public class talkreplace {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String talk = sc.next();
String[] arr = {"cnm","mlgb","tmd","sb"};
for (int i = 0; i < arr.length; i++) {
talk = talk.replace(arr[i],"小可爱");
}
System.out.println(talk);
}
}
StringBuilder
StringBuilder 可以看成是一个容器,创建之后里面的内容是可变的。
使用StringBuilder的场景:拼接,反转
- 作用:提高字符串操作效率(由于字符串的值不可改变,每次进行字符串操作(例如:拼接)时会产生新的字符串)
方法名 | 说明 |
Stringbuilder() | 创建一个空白可变字符串对象,不含任何内容 |
Stringbuilder(String str) | 根据字符串内容,创建可变字符串对象 |
常用方法:
方法 | 作用 |
append() | 添加数据,返回对象本身 |
reverse() | 反转字符串 |
length() | 字符串长度 |
toString() | 通过toString()就可以实现把StringBuilder转换为String |
因为StringBuilder是Java已经写好的类,Java底层对他做了一些特殊的处理。打印对象是他的属性值而不是地址值
public class BuilderTest {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder("hello");
System.out.println(stringBuilder);//hello
}
}
操作:
public class BuilderTest {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder("hello");
System.out.println(stringBuilder);
stringBuilder.append(12.3);//添加
System.out.println(stringBuilder);
stringBuilder.reverse();//反转
System.out.println(stringBuilder);//容器内做反转
int len = stringBuilder.length();//获取长度
System.out.println(len);
String sb = stringBuilder.toString();//变成字符串
System.out.println(sb);
}
}
练习:
键盘接受一个字符串,程序判断出该字符串是否是对称字符串,并在控制台打印是或不是
对称字符串:123321、111
非对称字符串:123123
import java.util.Scanner;
public class StringNUM {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("input: ");
String str = sc.next();
StringBuilder sb = new StringBuilder(str);
System.out.println(sb);
if (sb.reverse().toString().equals(str)){
System.out.println("对称");
}else {
System.out.println("不对称");
}
}
}
链式编程:
当我们调用一个方法时候,不需要用变量他的接收结果,可以继续调用其他方法
exp:
public class Test {
public static void main(String[] args) {
int len = getString().substring(2).replace("a","myq").length();
System.out.println(len);
}
public static String getString(){
Scanner sc = new Scanner(System.in);
String str = sc.next();
return str;
}
}
StringJoiner
-
StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。
-
作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用。
-
JDK8出现的
类 | 说明 |
StringJoiner(间隔符号) | 创建一个对象,并指定拼接时的间隔符号 |
StringJoiner(间隔符号,开始符号,结束符号) | 创建一个对象,并指定拼接时的 间隔符号,开始符号,结束符号 |
常用方法:
方法名 | 说明 |
add() | 添加数据,返回对象本身 |
length() | 返回长度 |
toString() | 返回一个字符串 |
import java.util.StringJoiner;
public class JoinerTest2 {
public static void main(String[] args) {
StringJoiner sj = new StringJoiner(",","[","]");
sj.add("1");
sj.add("1");
sj.add("1");
sj.add("1");
sj.add("1");
System.out.println(sj.length());//11
System.out.println(sj);//[1,1,1,1,1]
}
}