1.API
1.1API概述
API(Applicatin Programming Interface):应用程序编程接口
java API:指jdk中提供的各种功能的java类,可以直接使用,也可以使用帮助文档查看。
1.2如何使用帮助文档
①右键打开帮助文档(没有帮助文档的同学去下载一个)
jdk1.8 中文帮助文档
链接:百度网盘 请输入提取码
提取码:gxjy
注意:如果打开帮助文档后右侧是空白,那么需要右击帮助文档,打开属性,将此处勾选即可
②找到索引选项卡中的输入框
③在输入框中输入你想要查找的类,例如:Random
④看类在哪个包下
⑤看类的描述
⑥看构造方法
⑦看成员方法
1.3API的练习
需求:按照帮助文档的使用步骤学习Scanner类的使用,并实现键盘录入一个字符串,最后输出在控制台。
package Test1;
/*
从键盘录入一个字符串类型的数据并打印到控制台
*/
import java.util.Scanner;
public class ScannerString {
public static void main(String[] args) {
//创建对象 快捷键 Alt+shift+enter
Scanner sc = new Scanner(System.in);
//获取对象的值
System.out.println("请输入字符串");
String line =sc.nextLine();
//打印数据
System.out.println(line);
}
}
2.String
2.1String概述
String类在java.long包下,所以使用的时候不需要导包
String类代表字符串,Java程序中的所有字符串文字(如“abc”)都被实现为此类的实例
也就是说,Java程序中所有的双引号字符串,都是String类的对象。
字符串特点:
-
字符串不变,它们的值在创建后不能被更改;
-
虽然String的值是不可变的,它们可以被共享;
-
字符串效果上虽然是字符数组(char[]),但底层原理上是字节数组(byte[])。JDK8及以前是字符数组,JDK9之后是字节数组。
2.2String构造方法
package Test2;
/*
Dtring 构造方法
public String();创建一个空白字符串,不含有任何内容
public String(char[] chs);根据字符数组的内容,来创建字符串对象
public String(byte[] bys);根据字节数组的内容,来创建字符串对象
(建议使用) String s ="abc"; 直接赋值的方式创建字符串对象,内容就是abc
*/
public class StringMethod {
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);
}
}
2.3String对象的特点
①通过new创建的字符串对象,每一次new都会开辟一个内存空间,虽然内存相同,但地址不同。
②以" "方式给出的字符串,只要字符序列相同,无论在代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护。
package Test3;
public class StringSame {
public static void main(String[] args) {
//创建对象
char[] chars ={'a','b','c'};
String s1 = new String(chars);
String s2 = new String(chars);
String s3 = "abc";
String s4 = "abc";
//判断s1与s2的地址是否相同
System.out.println(s1==s2);
//判断s1与s3的地址是否相同
System.out.println(s1==s3);
//判断s3与s4的地址是否相同
System.out.println(s3==s4);
}
}
运行结果:
2.4字符串的比较
使用==比较
基本数据类型:比较的是数据值是否相同
引用数据类型:比较的是地址值是否相同
而字符串是一个对象,它比较的是内容是否相同,是通过一个方法来实现的,叫:equal()
public boolean equal(Object an Object):将此字符串与指定对象进行比较。由于比较的是字符串对象,所以参数直接传递一个字符串。
package Test4;
public class StringDemo4 {
public static void main(String[] args) {
//创建对象
char[] chars ={'a','b','c'};
String s1 = new String(chars);
String s2 = new String(chars);
String s3 = "abc";
String s4 = "abc";
//判断字符串对象的地址是否相同
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));
}
}
运行结果:
2.5实例:用户登录
需求:已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示。
package Test5;
import java.util.Scanner;
/*
需求:已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示。
*/
public class StringDemo5 {
public static void main(String[] args) {
//定义两个字符串
String name = "小白";
String code = "123456";
for(int i =1;i<=3;i++) {
//创建对象,从键盘获取用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String inputName = sc.nextLine();
System.out.println("请输入密码:");
String inputCode = sc.nextLine();
//判断用户输入用户名和密码是否相同
if (name.equals(inputName) && code.equals(inputCode)) {
System.out.println("登录成功");
break;
}
else {
if((3-i)==0){
System.out.println("您的账户被锁定,请与管理员联系");
}else{
System.out.println("您输入的用户名或密码错误,你还有" + (3-i) + "次机会");
}
}
}
}
}
2.6实例:遍历字符串
需求:键盘录入一个字符串,并使用程序实现在控制台遍历字符串
思路:①使用Scanner实现从键盘录入一个字符串
②创建一个String类对象接收字符串
③使用for循环遍历字符串。使用对象.length()返回字符串长度,用对象.charAt()返回字符串 索引处的值,字符串索引也是从0开始。
package Test6;
import java.util.Scanner;
/*
需求:键盘录入一个字符串,并使用程序实现在控制台遍历字符串
*/
public class StringDemo6 {
public static void main(String[] args) {
//创建对象
Scanner sc = new Scanner(System.in);
//接收字符串
System.out.println("请输入字符串:");
String s1 = sc.nextLine();
//使用for循环遍历字符串
for(int i=0;i<s1.length();i++){
System.out.println(s1.charAt(i));
}
}
}
2.7实例:统计字符次数
需求:键盘录入一个字符串,统计该字符串中大写字母字符、小写字母字符、数字字符出现的次数(不考虑其他字符)
思路:①创建Scanner对象
②创建String对象接收键盘录入字符串
③定义三个计数变量,赋值为0
④使用for循环遍历字符串,使用if条件判断语句判断大写字母、小写字母、数字
注意:这里的关键是如何判断大写字母、小写字母和数字。因为遍历字符串后得到的内容是字符,所以只用判断字符的区间就可以。大写字母是:'A'<=chr=<'Z',小写字母是:'a'<=chr=<'z',数字是:'0'<=chr=<'9';
package Test7;
import java.util.Scanner;
/*
统计字符次数
需求:键盘录入一个字符串,统计该字符串中大写字母字符、小写字母字符、数字字符出现的次数(不考虑其他字符)
*/
public class StringDemo7 {
public static void main(String[] args) {
//创建Scanner对象
Scanner sc = new Scanner(System.in);
//创建String对象接收键盘录入字符串
System.out.println("请输入字符串:");
String s = sc.nextLine();
//定义三个计数变量,赋值为0
int big=0;
int small=0;
int number=0;
//使用for循环遍历字符串
for(int i =0;i<s.length();i++){
//使用if条件判断语句判断大写字母
if (s.charAt(i) >='A' && s.charAt(i) <= 'Z') {
big++;
}else if(s.charAt(i) >='a' && s.charAt(i) <= 'z'){
small++;
}else if(s.charAt(i) >='0'&& s.charAt(i) <='9'){
number++;
}
}
System.out.println("大写字母的个数:"+big);
System.out.println("小写字母的个数:"+small);
System.out.println("数字的个数:"+number);
}
}
2.8实例:字符串拼接
需求:定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。例如int[] arr={1,2,3},执行方法后的输出结果为[1,2,3]
思路:①定义一个int类型的数组并进行初始化
②定义一个方法,在方法中定义一个空字符串,根据输出结果拼接字符串“[”
③使用for循环遍历数组,当到达数组最后一个数字时,只拼接数组中的数字;其他位置拼 接数字加“,”;遍历结束后拼接“]”
④调用方法并赋值给String对象s,输出结果。
package Test8;
/*
需求:定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回,
调用该方法,并在控制台输出结果。例如int[] arr={1,2,3},执行方法后的输出结果为[1,2,3]
*/
public class StringDemo8 {
public static void main(String[] args) {
//定义int类型的数组
int[] arr={1,2,3};
String s =arrayToString(arr);
System.out.println(s);
}
//定义方法
public static String arrayToString(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;
}
}
2.9实例:字符串反转
需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用方法后,在控制台输出结果
例如:键盘录入abc,输出结果cba
思路:①创建Scanner对象,从键盘获取输入
②定义方法,在方法中逆遍历字符串,将字符串进行拼接、
③调用方法,输出结果
package Test9;
import java.util.Scanner;
/*
* 需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用方法后,在控制台输出结果
例如:键盘录入abc,输出结果cba
* */
public class StringDemo9 {
public static void main(String[] args) {
//创建Scanner对象
Scanner sc = new Scanner(System.in);
//从键盘录入字符串
System.out.println("请输入字符串:");
String s = sc.nextLine();
//调用方法
String s1 = turnString(s);
//输出结果
System.out.println(s1);
}
// 定义方法
public static String turnString(String s){
//定义空字符串
String ss = "";
//倒着遍历字符串
for(int i=s.length()-1;i>=0;i--){
ss+=s.charAt(i);
}
return ss;
}
}
2.10帮助文档查看String方法
方法名 | 说明 |
public boolean equals(Object an Object) | 判断字符串内容是否相等 |
public charAt(int index) | 返回指定索引处的char值 |
puublic int length() | 返回字符串的长度 |
3.StringBuilder
3.1 StringBuilder描述
如果对字符串进行拼接,每次拼接都会产生一个新的String对象,既耗时又耗空间。所以有了StringBuilder类来解决这个问题。
StringBuilder是一个可变的字符串类,我们可以把它当做一个容器,这里的可变指的是StringBuiler对象的内容是可变的。
String和StringBuilder的区别:
String:内容不可变
StringBuilder:内容可变
3.2StringBuilder的构造方法
构造方法 | 作用 |
StringBuilder() | 构造空白的可变字符串对象,不含有任何内容 |
StringBuilder(String str) | 根据字符串内容,创建可变字符串对象 |
package test1;
public class StringBuilderDemo1 {
public static void main(String[] args) {
// 创建空白的可变字符串对象
StringBuilder sb = new StringBuilder();
System.out.println("sb:"+sb);
System.out.println("sb.length():"+sb.length());
//创建带字符的可变字符串对象
StringBuilder sb2 = new StringBuilder("HelloWorld");
System.out.println("sb:"+sb2);
System.out.println("sb.length():"+sb2.length());
}
}
3.3StringBuilder添加和反转
方法名 | 说明 |
public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
package test2;
public class StringBuilderDemo2 {
public static void main(String[] args) {
//创建一个空的可变字符串对象
StringBuilder sb = new StringBuilder();
//使用append方法添加内容
//链式编程
sb.append("我爱你").append("一万年").append(100000).append("年");
System.out.println("sb:"+sb);
//使用reverse反转字符串
sb.reverse();
System.out.println("sb:"+sb);
}
}
3.4 String与StringBuilder相互转换
①StringBuilder转化为String
public String toString():通过toString()可以实现把StringBuilder转化为String
②String转化为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现String转化为StringBuilder
package test3;
/*
①StringBuilder转化为String
public String toString():通过toString()可以实现把StringBuilder转化为String
②String转化为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现String转化为StringBuilder
* */
public class StringBuilderDemo3 {
public static void main(String[] args) {
/* // StringBuilder转化为String
StringBuilder sb = new StringBuilder();
sb.append("hello");
//public String toString():通过toString()可以实现把StringBuilder转化为String
// String s = sb;这个是错误的
String s = sb.toString();
System.out.println(s);*/
//String转化为StringBuilder
String s = "World";
// StringBuilder sb =s;这个是错误的
//public StringBuilder(String s):通过构造方法就可以实现String转化为StringBuilder
StringBuilder sb = new StringBuilder(s);
System.out.println(sb);
}
}
3.5案例:字符串拼接升级版
需求:定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。例如int[] arr={1,2,3},执行方法后的输出结果为[1,2,3] 思路:①定义int类型的数组,并进行初始化
②定义方法,在方法体中创建StringBuilder对象,遍历字符串,使用append方法进行字符 串拼接。
③通过toString()方法将StringBuilder转化为String对象,并返回String类型的返回值
④调用方法,输出结果
package test4;
/*
需求:定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。
例如int[] arr={1,2,3},执行方法后的输出结果为[1,2,3]
*/
public class StringBuilderDemo4 {
public static void main(String[] args) {
//定义数组
int[] arr ={1,2,3};
//调用方法
String s1 = arrayReturn(arr);
System.out.println(s1);
}
//定义方法
public static String arrayReturn(int[] arr){
//创建StringBuilder对象
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i=0;i<arr.length;i++){
if(i==arr.length-1){
sb.append(arr[i]);
}else{
sb.append(arr[i]);
sb.append(",");
}
}
sb.append("]");
String s = sb.toString();
return s;
}
}
3.6案例:字符串反转升级版
需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用方法后,在控制台输出结果
例如:键盘录入abc,输出结果cba
思路:①创建Scanner对象,从键盘获取输入
②定义方法,在方法体中将String对象转换为StringBuilder对象,使用StringBuilder的 reverse()方法,将字符串进行反转,再将StringBuilder转化为String对象
③调用方法,输出结果
package test5;
import java.util.Scanner;
/*
* 需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用方法后,在控制台输出结果
例如:键盘录入abc,输出结果cba
* */
public class StringBuilderDemo5 {
public static void main(String[] args) {
//创建Scanner对象,从键盘获取输入
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String s = sc.nextLine();
//调用方法
String s2 =reverseString(s);
System.out.println(s2);
}
//定义方法
public static String reverseString(String s){
//将String对象转换成StringBuilder对象
StringBuilder sb = new StringBuilder(s);
String s1=sb.reverse().toString();
return s1;
}
}
3.7帮助文档查看StringBuilder方法
方法名 | 说明 |
public StringBuilder append(任意类型) | 添加数据,返回对象本身 |
public StringBuilder reverse() | 返回相反字符序列 |
public String toString() | 通过toString()实现把StringBuilder转换为String |