API介绍及String与StringBuilder
1. APIAPI (Application Programming Interface) :应用程序编程接口java中的API指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。2. String类String 类代表字符串,Java 程序中的所有字符串文字(
1. API
API (Application Programming Interface) :应用程序编程接口
java中的API
指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
2. String类
String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。String 类在 java.lang 包下,所以使用的时候不需要导包!
字符串不可变,它们的值在创建后不能被更改
虽然 String 的值是不可变的,但是它们可以被共享
字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )
2.1 常用构造方法:
方法名 | 说明 |
---|---|
public String() | 创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
String s = “abc”; | 直接赋值的方式创建字符串对象,内容就是abc |
public class StringDemo02 {
/**
* String 代表了字符串,在 Java 程序中,所有使用双引号括起来的内容,默认就是 String 类的对象
*
* String 类的特点
* 不可变性
* 字符串对象一旦创建,内容就不能被改变
*
* String s = "aaa";
* s = "bbb"; //创建一个新的字符串对象,并将 s 变量指向了新的对象,原来的 "aaa" 对象并没有改变。
* System.out.println(s); //bbb
*
* 内存共享
* 通过双引号创建字符串对象时,虚拟机会先到字符串常量池中查找是否有内容相同的对象,
* 如果没有则创建,有则直接引用。
*
* String s1 = "Hello";
* String s2 = "Hello";
* System.out.println(s1 == s2); //true
*/
public static void main(String[] args) {
//创建一个空的字符串对象
String s1 = new String();
System.out.println("s1: " + s1);
//根据一个字节数组创建字符串对象
byte[] bys = {97, 98, 99};
String s2 = new String(bys);
System.out.println("s2: " + s2);
//根据一个字符数组创建字符串对象
char[] chs = {'A', 'B', 'C'};
String s3 = new String(chs);
System.out.println("s3: " + s3);
//根据一个原始的字符串创建一个新的字符串对象
String original = "Hello";
String s4 = new String(original);
System.out.println("s4: " + s4);
}
}
2.2 创建字符串对象两种方式的区别
通过构造方法创建:
通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
直接赋值方式创建:
以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串常量池中维护(堆内存中的字符串常量池StringTable)
2.3 字符串比较
==号的作用
比较基本数据类型:比较的是具体的值
比较引用数据类型:比较的是对象地址值
equals方法的作用
比较两个字符串内容是否相同、区分大小写
public class StringDemo {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
//比较的是地址值 内存共享
System.out.println(s1 == s2); //true
String s3 = new String("Hello");
String s4 = new String("Hello");
//比较的是地址值
System.out.println(s3 == s4); //false
//比较两个字符串对象的内容是否相同
boolean b = s3.equals(s4);
System.out.println(b); //true
}
}
用户登录案例
public class StringDemo {
/**
* 模拟用户登录,用户在控制台输入用户名和密码,判断用户是否登录成功,用户有三次登录机会,超过三次账户将被锁定。
*/
public static void main(String[] args) {
//定义两个变量,作用是模拟数据库存储,记录用户正确的用户名和密码
String dbUsername = "hello";
String dbPassword = "abc123";
//创建 Scanner 对象
Scanner sc = new Scanner(System.in);
//循环3次,让用户最多可以尝试登录3次
for (int i = 0; i < 3; i++) {
//提示用户并接收用户输入的用户名和密码
System.out.println("请输入用户名");
String username = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine();
//判断用户输入的用户名和密码是否正确
if (username.equals(dbUsername) && password.equals(dbPassword)) {
System.out.println("登录成功");
break; //跳出循环
} else {
if (i == 2) {
System.out.println("登录失败,您的账户已经被锁定,请联系系统管理员。");
} else {
System.out.println("登录失败,您还有" + (2 - i) + "次登录机会。");
}
}
}
}
}
遍历字符串案例
public class StringDemo {
/**
* 遍历字符串中的所有字符
*
* char charAt(int index) 获取指定位置的字符
* int length() 获取字符串的长度
字符串也有索引,索引从0开始
*/
public static void main(String[] args) {
//创建 Scanner 对象
Scanner sc = new Scanner(System.in);
//提示用户输入
System.out.println("请输入一个字符串");
//接收数据
String str = sc.nextLine();
//遍历字符串中所有的字符
for (int i = 0; i < str.length(); i++) {
System.out.println(str.charAt(i));
}
// int[] arr = {10, 20, 30, 40, 50};
// for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]);
// }
}
}
统计字符次数案例
public class StringDemo {
/**
* 键盘输入一个字符串,统计该字符串中小写字母、大写字母、数字出现的次数(不考虑其他字符)。
*/
public static void main(String[] args) {
//创建 Scanner 对象
Scanner sc = new Scanner(System.in);
//提示用户输入
System.out.println("请输入一个字符串");
//接收数据
String str = sc.nextLine();
//定义三个变量,记录小写字母、大写字母、数字的出现次数
int lowercase = 0;
int uppercase = 0;
int number = 0;
//遍历字符串中所有的字符
for (int i = 0; i < str.length(); i++) {
//取出当前遍历到的字符
char c = str.charAt(i);
//判断是否为小写
if (c >= 'a' && c <= 'z') {
lowercase++;
}
//判断是否为大写
if (c >= 'A' && c <= 'Z') {
uppercase++;
}
//判断是否为数字
if (c >= '0' && c <= '9') {
number++;
}
}
//打印结果
System.out.println("小写字母:" + lowercase);
System.out.println("大写字母:" + uppercase);
System.out.println("数字:" + number);
}
}
字符串拼接案例
public class StringDemo {
/**
* 字符串的拼接,定义方法把数组拼成字符串
*/
public static void main(String[] args) {
//创建数组
int[] arr = {10, 20, 30, 40, 50};
//调用方法
String s = arrayToString(arr);
//打印结果
System.out.println(s);
}
/**
* 将数组中的元素按照指定的格式拼接并返回
*
* 参数:int[]
* 返回值类型:String
*/
public static String arrayToString(int[] arr) {
//定义变量,作用是存储拼接的结果
String s = "[";
//遍历数组
for (int i = 0; i < arr.length; i++) {
//先将当前遍历到的元素拼接到字符串中
s += arr[i];
//如果当前遍历的元素不是最后一个,再拼接一个逗号
if (i < arr.length - 1) {
s += ", ";
}
}
//最后再拼接一个右中括号
s += "]";
//返回结果
return s;
}
}
字符串反转案例
public class StringDemo {
/**
* 定义一个方法,将字符串中的内容反转,并将反转后的字符串返回给方法的调用者。
*/
public static void main(String[] args) {
//创建 Scanner 对象
Scanner sc = new Scanner(System.in);
//提示用户输入
System.out.println("请输入一个字符串");
//接收数据
String str = sc.nextLine();
//调用方法
String s = reverse(str);
//打印结果
System.out.println(s);
}
/**
* 反转字符串内容
*
* 参数:String
* 返回值:String
*/
public static String reverse(String original) { //"Hello"
//定义变量,累加倒序遍历的字符串
String s = "";
//倒序遍历
for (int i = original.length() - 1; i >= 0; i--) {
s += original.charAt(i);
}
//返回结果
return s;
}
}
2.4 String常用方法
public class StringDemo11 {
/**
*
*
* char charAt(int index)
* int length()
* String substring(int beginIndex, int endIndex)
* boolean equals(Object anObject)
* boolean equalsIgnoreCase(String anotherString)
* boolean contains(CharSequence s)
*
* String concat(String str) 拼接一个字符串
* boolean startsWith(String prefix) 判断是否以某个字符串开始
* boolean endsWith(String suffix) 判断是否以某个字符串结尾
*
* byte[] getBytes() 字符串转字节数组
* char[] toCharArray() 字符串转字符数组
*
* int indexOf(String str, int fromIndex) 判断某个字符串第一次出现的位置
* int lastIndexOf(String str, int fromIndex) 判断某个字符串最后一次出现的位置
*
* boolean isEmpty() 判断字符串内容是否为空
*
* String replace(CharSequence target, CharSequence replacement) 替换
* String[] split(String regex) 切割
*
* String toLowerCase() 转小写
* String toUpperCase() 转大写
* String trim() 去两端空格
*
* static String valueOf(boolean b) 构建字符串对象
* static String format(String format, Object... args) 格式化
*
*
*
* @param args
*/
public static void main(String[] args) {
String s1 = "HelloWorld";
//String concat(String str) 拼接一个字符串
System.out.println(s1.concat("Hello"));
//boolean startsWith(String prefix) 判断是否以某个字符串开始
System.out.println(s1.startsWith("Hello"));
//boolean endsWith(String suffix) 判断是否以某个字符串结尾
System.out.println(s1.endsWith("World"));
//byte[] getBytes() 字符串转字节数组
System.out.println(Arrays.toString(s1.getBytes()));
//char[] toCharArray() 字符串转字符数组
System.out.println(Arrays.toString(s1.toCharArray()));
//int indexOf(String str, int fromIndex) 判断某个字符串第一次出现的位置
System.out.println(s1.indexOf("o", 5));
//int lastIndexOf(String str, int fromIndex) 判断某个字符串最后一次出现的位置
System.out.println(s1.lastIndexOf("o", 5));
//boolean isEmpty() 判断字符串内容是否为空
String s2 = "";
System.out.println(s2.isEmpty());
//String replace(CharSequence target, CharSequence replacement) 替换
String s3 = "你真是sb,真煞笔,真是sb";
System.out.println(s3.replace("sb", "**").replace("煞笔", "**"));
String mobile = "13811111111";
System.out.println(mobile.substring(0, 3) + "****" + mobile.substring(7));
//String[] split(String regex) 切割
String names = "刘备,关羽,张飞,赵云,孙悟空";
String[] split = names.split(",");
System.out.println(Arrays.toString(split));
//String toLowerCase() 转小写
System.out.println(s1.toLowerCase());
//String toUpperCase() 转大写
System.out.println(s1.toUpperCase());
//String trim() 去两端空格
String s4 = " He llo ";
System.out.println(s4);
System.out.println(s4.trim());
System.out.println(s4.replace(" ", ""));
//static String valueOf(boolean b) 构建字符串对象
String s = String.valueOf(100);
//static String format(String format, Object... args) 格式化
/**
* String name = "张三";
* int age = 18;
*
* 姓名:张三,年龄:18
*/
String name = "张三";
int age = 18;
System.out.println("姓名:" + name + ",年龄:" + age);
System.out.println(String.format("姓名:%s,年龄:%s", name, age));
}
}
3. StringBuilder类
StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中的内容是可变的
由于字符串具有不可变性,在字符串拼接时会产生大量内存垃圾,为了解决这个问题,Java提供了StringBuilder类,StringBuilder在拼接时不会产生内存垃圾
3.1 StringBuilder类和String类的区别
String类:内容是不可变的
StringBuilder类:内容是可变的
3.2 构造方法
方法名 | 说明 |
---|---|
public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
public class StringBuilderDemo {
/**
* StringBuilder 构造方法
* public StringBuilder() 创建一个空的 StringBuilder 对象
* public StringBuilder(String str) 创建一个具有初始值的 StringBuilder 对象
*/
public static void main(String[] args) {
//创建一个空的 StringBuilder 对象
StringBuilder sb1 = new StringBuilder();
System.out.println("sb1: " + sb1);
//创建一个具有初始值的 StringBuilder 对象
StringBuilder sb2 = new StringBuilder("Hello");
System.out.println("sb2: " + sb2);
}
}
3.3 StringBuilder类添加和反转方法
public class StringBuilderDemo {
/**
* 常用方法
* StringBuilder append(String s) 追加内容
* StringBuilder reverse() 反转内容
*/
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
//追加内容
sb.append("Hello");
sb.append(100);
sb.append(false);
System.out.println(sb); //Hello100false
//反转内容
sb.reverse();
System.out.println(sb); //eslaf001olleH
}
}
3.4 StringBuilder和String相互转换
public class StringBuilderDemo {
/**
* String -> StringBuilder 使用的是 StringBuilder 的构造方法
*
* StringBuilder -> String 使用的是 StringBuilder 的 toString 方法
*/
public static void main(String[] args) {
//String -> StringBuilder
String str = "HelloWorld";
StringBuilder sb = new StringBuilder(str);
//StringBuilder -> String
String str2 = sb.toString();
}
}
字符串拼接升级版案例
public class StringBuilderDemo {
/**
* 字符串拼接升级版
*/
public static void main(String[] args) {
//创建数组
int[] arr = {11, 22, 33, 44, 55};
System.out.println(Arrays.toString(arr));
// //调用方法
// String s = arrayToString(arr);
// //打印结果
// System.out.println(s);
}
/**
* 将数组中的元素按照指定格式拼接成一个字符串并返回
*
* 参数:int[]
* 返回值类型:String
*/
public static String arrayToString(int[] arr) {
//创建 StringBuilder
StringBuilder sb = new StringBuilder("[");
//遍历数组
for (int i = 0; i < arr.length; i++) {
//拼接当前遍历到的元素
sb.append(arr[i]);
//如果当前元素不是最后一个元素,还需要再追加一个逗号
if (i < arr.length - 1) {
sb.append(", ");
}
}
//最后再追加一个右中括号
return sb.append("]").toString();
}
}
字符串反转升级版案例
public class StringBuilderDemo {
/**
* 字符串反转升级版
*/
public static void main(String[] args) {
//创建 Scanner 对象
Scanner sc = new Scanner(System.in);
//提示用户输入
System.out.println("请输入一个字符串");
//接收数据
String str = sc.nextLine();
//调用方法
String s = reverse(str);
//打印结果
System.out.println(s);
}
public static String reverse(String original) {
return new StringBuilder(original).reverse().toString();
// //创建 StringBuilder 对象
// StringBuilder sb = new StringBuilder(original);
// //反转内容
// sb.reverse();
// //将 StringBuilder 转换成 String
// String s = sb.toString();
// //返回结果
// return s;
}
}
3. ArrayList类
什么是集合:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
ArrayList集合的特点:底层是数组实现的,长度可以变化
泛型的使用,用于约束集合中存储元素的数据类型
3.1 成员方法
方法名 | 说明 |
---|---|
public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
public E get(int index) | 返回指定索引处的元素 |
public int size() | 返回集合中的元素的个数 |
public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
更多推荐
所有评论(0)