API
1.1 API概述
API(Application Programming Interface):应用程序编程接口
编写一个机器人程序去控制机器人踢足球,程序需要向机器人发出向前跑、向后跑、射门、抢球等名种命令。机器人厂商一定会提供一些用于控制机器人的接口类,这些类中定义好了操作机器人各种动作的方法。其实,这些接口类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为API
Java APl:指的就是JDK中提供的各种功能的Java类
这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,
只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用
返回上一步 Ctrl+z
1.2, JAVA API文档的使用
-
右键打开该文档
- 找到索引选项卡中的输入框
-
在输入框中输入;如random
-
看类在哪个包
-
看类的描述
-
看构造方法
- 看成员方法
1.3 API使用练习
需求:按照帮助文档的使用步骤学习Scanner类的使用,并实现键盘录入一个字符串,最后输出在控制台
Ctrl+Alt+V(快速输出)
package com.ithema05;
import java.util.Scanner;
public class scannerDemo {
public static void main(String[] args) {
//创建对象
Scanner sc =new Scanner(System.in);
//接收数据
System.out.println("scanner一个数");
//String ling=sc.nextLine();
//Ctrl+Alt+V(快速输出)
String line = sc.nextLine();
//输出结果
System.out.println("你输入的数据是"+line);
}
}
String
2.1 String概述
String类在java.lang包下,所以使用的时候不需要导包
String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例也就是说==,Java程序中所有的双引号字符串,都是String类的对象==
字符串的特点
字符串不可变,它们的值在创建后不能被更改
虽然String的值是不可变的,但是它们可以被共享
字符串效果上相当于字符数组( char[),但是底层原理是字节数组( byte[])
2.2 String构造方法
public String() | 创建—个空白字符串对象,不含有任何内容 |
---|---|
String s = “abc” ; | 直接赋值的方式创建字符串对象,内容就是abc |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
例;
package com.ithema06;
/*
String构造方法;
public String():创建一个空白字符串对象,不含有任何内容
public String(char[] chs):根据字符数组的内容,来创建字符串对象
public String(byte[] bys):根据字节数组的内容,来创建字符串对象
String s = “abc”;直接赋值的方式创建字符串对象,内容就是abc
*/
public class StringDemo {
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);
// public String(byte[] bys):根据字节数组的内容,来创建字符串对象
byte[] chs2={97,98,99};
String s3= new String(chs2);
System.out.println(s3);
//String s = “abc”;直接赋值的方式创建字符串对象,内容就是abc
String s4="abc";
System.out.println(s4);
}
}
2.3 String对象的特点
1)通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同
2)以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护
string s3 = " abc" ;
string s4 = " abc" ;
在上面的代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考;第二行则让s4直接参考字符串池中的String对象,也就是说它们本质上是同一个对象
2.4字符串的比较使用==做比较
基本类型:比较的是数据值是否相同
引用类型:比较的是地址值是否相同
字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫: equals()
package com.ithema06;
/*
使用==.做比较;
基本类型,比较的是数据值是否相同引用类型:比较的是地址值是香相同
pubLic booLean equals (Object anObject):
将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串
*/
public class StringDemo2 {
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);
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(s1.equals(s4));
}
}
例题;用户登录
package com.ithema07;
/*
需求:
已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示思路:
1:已知用户名和密码,定义两个字符串表示即可
2:键盘录八要登录的用户名和密码,用Scanner实现
3:拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。字符串的内容比较,用equals()方法实现4 :用循环实现多次机会,这里的次数明确,采用for循环实现,并在登录成功的时候,使用break结束循环
*/
import java.util.Scanner;
public class StringText {
public static void main(String[] args) {
//1:已知用户名和密码,定义两个字符串表示即可
String username = "woshiba";
String password = "nishiwa";
for (int i = 0;i<3; i++){
// 2:键盘录八要登录的用户名和密码,用Scanner实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String name = sc.nextLine();
System.out.println("请输入密码");
String paw = sc.nextLine();
if (name.equals(username) && paw.equals(password)) {
System.out.println("登录成功");
break;
} else {
System.out.println("登录失败,你还有"+(2-i)+"次机会");
}
}
}
}
例题;遍历字符串
package com.ithema08;
/*需求。
键盘录入一个字符串,使用程序实现在控制台遍历该字符串
思路:
1 :键盘盘录入一个字符串,用Scanner实现
2:遍历字符串,首先要能够获取到字符串中的每一个字符
public char charAt (int index):返回指定索引处的char值,
字符串的索引也是从0开始的
3:遍历字符串,其次要能够获取到字符串的长度public int Length() :返回此字符串的长度
数组的长度:
数组名.Length
字符串的长度:字符串对象.Length()
4:遍历字符串的通用格式*/
import java.util.Scanner;
public class StringText02 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个字符串");
String line=sc.nextLine();
/*2:遍历字符串,首先要能够获取到字符串中的每一个字符
System.out.println(line.charAt(0));
//System.out.println(line.charAt(1));
// System.out.println(line.charAt(2));*/
for (int i=0;i<line.length();i++){
System.out.println(line.charAt(i));
}
}
}
public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的
例题;统计字符次数
需求:键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
假如ch是一个字符,我要判断它属于大写字母,小写字母,还是数字,直接判断该字符是否在对应的范围即可
package com.ithema09;
import java.util.Scanner;
public class SeringTest04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String line = sc.nextLine();
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
for (int i = 0; i < line.length(); i++) {
char ch = line.charAt(i);
if (ch >= 'A' && ch <= 'Z') {
bigCount++;
} else if (ch >= 'a' && ch <= 'z') {
smallCount++;
} else if (ch >= '0' && ch <= '9') {
numberCount++;
}}
System.out.println("大写字母"+bigCount);
System.out.println("xiao小写"+smallCount);
System.out.println("数字"+numberCount);
}
}
例题;拼接字符串
需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。例如,数组为int[arr = {1,2,3};,执行方法后的输出结果为:[1,2,3]
package com.ithema10;
public class StringTest05 {
public static void main(String[] args) {
int[] arr ={1,2,3};
//调用方法
String s= arrayToString(arr);
System.out.println("s;"+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;
}
}
例题;字符串反窜
package com.ithema10;
import java.util.Scanner;
public class StringTest05 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个字符串");
String line = sc.nextLine();
String s=arrayToString(line);
System.out.println(s);
}
public static String arrayToString(String s){
String ss="";
for (int i=s.length()-1;i>=0;i--){
ss+=s.charAt(i);
}
return ss;
}
}
StringBuilder
3.1 StringBuilder概述
如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。那么有没有一种比较好的方式可以解决这个问题呢?答案是肯定的,我们可以通过Java提供的StringBuilder类就来解决这个问题。
StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器这里的可变指的是StringBuilder对象中的内容是可变的
3.2 StringBuilder构造方法
public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
---|---|
public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
public class StringBuilderDemoe1 {
public static void main(string[] args) {
/ / public stringBuiLder(),创建一个空白可变字符串对象,不含有任何内容
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);
System.out.println("sb.length():" + sb.length());
/ / public StringBuiLder(String str)。根据字符串的内容,来创建可变字符串对
StringBuilder sb2 = new stringBuilder( "he1lo");
System.out.println("sb2:" + sb2);
System.out.println("sb2.1ength();" + sb2.length());
}
}
3.3 StringBuilder的添加和反转方法
public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
---|---|
public StringBuilder reverse() | 返回相反的字符序列 |
//StringBuilder的添加和反转方法
//public StringBuiLder append(任意类型):添加数据,并返回对象本身
//public StringBuiLder reverse():返回相反的字符序列
public class StringBuilderDemo01 {
public static void main(String[] args) {
//创建对象
StringBuilder sb = new StringBuilder();
/ / public StringBuilder append(任意类型):添加数据,并返回对象本身
stringBuiLder sb2 = sb.append( "hello" ) ;
System.out.printLn( "sb:” + sb); .
System .out.printLn( "sb2: ” +sb2);
System.out.printLn( sb == sb2);
//sb .append ( "heLlo");
//sb.append ( "worLd" );
//sb .append( "java" );
//sb . append( 100) ;
//链式编程
sb.append("he1lo" ).append(""wor1d").append("java").append(100);
System.out.println("sb:" + sb);
)
// public StringBuiLder reverse():返回相反的字符序列sb.reverse();
System.out.print1n( "sb:" + sb);
}
}
3.4 StringBuilder和String相互转换
因为StringBuilder有append(), reverse(),所以有时候可以String转化去用。
1.StringBuilder转换为String
public String toString(): 通过toString()就可以实现把StringBuilder转换为String
2.String 转换为StringBuilder
public StringBuilder(String s): 通过构造方法就可以实现把String转换为StringBuilder