Java基础知识 第八天

今日内容介绍

API概述

Scanner类与String类

StringBuilder类

第1章API概述

1.1API概念

API(Application Programming Interface) : 应用程序编程接口

编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等各种命令,没有编过程序的人很难想象这样的程序如何编写。但是对于有经验的开发人员来说,知道机器人厂商一定会提供一些用于控制机器人的Java类,这些类中定义好了操作机器人各种动作的方法。其实,这些Java类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为API。本章涉及的Java API指的就是JDK中提供的各种功能的Java类

1.2快速使用API步骤:

A:打开帮助文档

B:点击显示,找到索引,看到输入框

C:你要学习什么内容,你就在框框里面输入什么内容

举例:Random

D:看包

java.lang包下的类在使用的时候是不需要导包的

E:看类的描述

Random类是用于生成随机数的类

F:看构造方法

Random():无参构造方法

Random r = new Random();

G:看成员方法

public int nextInt(int n):产生的是一个[0,n)范围内的随机数

调用方法:

看返回值类型:人家返回什么类型,你就用什么类型接收

看方法名:名字不要写错了

看形式参数:人家要几个参数,你就给几个,人家要什么数据类型的,你就给什么数据类型的

int number = r.nextInt(100);

第2章Scanner类 与 String类

2.1Scanner类

2.1.1Scanner类作用

用Scanner类的方法可以完成接收键盘录入的数据

2.1.2Scanner类接受键盘录入的字符串

2.1.2.1案例代码一:

packagecom.xuexi_01;

importjava.util.Scanner;

/*

* Scanner:用于获取键盘录入的数据。(基本数据类型,字符串数据)

* public String nextLine():获取键盘录入的字符串数据

*/

public classScannerDemo {

public static voidmain(String[]args) {

//创建键盘录入对象

Scannersc =newScanner(System.in);

//接收数据

Strings = sc.nextLine();

//输出结果

}

}

2.2String类

2.2.1String类概述

通过JDK提供的API,查看String类的说明

A:"abc"是String类的一个实例,或者成为String类的一个对象

B:字符串字面值"abc"也可以看成是一个字符串对象

C:字符串是常量,一旦被赋值,就不能被改变

D:字符串本质是一个字符数组

2.2.2String类的构造方法

String(Stringoriginal):把字符串数据封装成字符串对象

String(char[] value):把字符数组的数据封装成字符串对象

String(char[] value, int index, intcount):把字符数组中的一部分数据封装成字符串对象

2.2.2.1常用构造方法演示

2.2.2.1.1案例代码二:

packagecom.xuexi_02;

/*

* String:字符串类

*由多个字符组成的一串数据

*字符串其本质是一个字符数组

*构造方法:

* String(Stringoriginal):把字符串数据封装成字符串对象

* String(char[]value):把字符数组的数据封装成字符串对象

* String(char[]value, int index, int count):把字符数组中的一部分数据封装成字符串对象

*

*注意:字符串是一种比较特殊的引用数据类型,直接输出字符串对象输出的是该对象中的数据。

*/

public classStringDemo {

public static voidmain(String[]args) {

//方式1

//String(String original):把字符串数据封装成字符串对象

Strings1 =newString("hello");

//方式2

//String(char[] value):把字符数组的数据封装成字符串对象

char[] chs = {'h','e','l','l','o'};

Strings2 =newString(chs);

//方式3

//String(char[] value, int index, int count):把字符数组中的一部分数据封装成字符串对象

//String s3 = new String(chs,0,chs.length);

Strings3 =newString(chs,1,3);

//方式4

Strings4 ="hello";

}

}

2.2.2.2创建字符串对象两种方式的区别2.2.2.2.1案例代码三:

packagecom.xuexi_02;

/*

*通过构造方法创建的字符串对象和直接赋值方式创建的字符串对象有什么区别呢?

*通过构造方法创建字符串对象是在堆内存。

*直接赋值方式创建对象是在方法区的常量池。

* ==:

*基本数据类型:比较的是基本数据类型的值是否相同

*引用数据类型:比较的是引用数据类型的地址值是否相同

*/

public classStringDemo2 {

public static voidmain(String[]args) {

Strings1 =newString("hello");

Strings2 ="hello";

System.out.println("s1==s2:"+(s1==s2));//false

Strings3 ="hello";

System.out.println("s1==s3:"+(s1==s3));//false

System.out.println("s2==s3:"+(s2==s3));//true

}

}

2.2.3String类的判断功能

boolean equals(Object obj):比较字符串的内容是否相同

boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写

boolean startsWith(String str):判断字符串对象是否以指定的str开头

boolean endsWith(String str):判断字符串对象是否以指定的str结尾

2.2.3.1判断方法演示2.2.3.1.1案例代码四:

packagecom.xuexi_03;

/*

* Object:是类层次结构中的根类,所有的类都直接或者间接的继承自该类。

*如果一个方法的形式参数是Object,那么这里我们就可以传递它的任意的子类对象。

* String类的判断功能:

* boolean equals(Object obj):比较字符串的内容是否相同

* boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写

* boolean startsWith(String str):判断字符串对象是否以指定的str开头

* boolean endsWith(String str):判断字符串对象是否以指定的str结尾

*/

public classStringDemo {

public static voidmain(String[]args) {

//创建字符串对象

Strings1 ="hello";

Strings2 ="hello";

Strings3 ="Hello";

//boolean equals(Object obj):比较字符串的内容是否相同

//boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写

//boolean startsWith(String str):判断字符串对象是否以指定的str开头

}

}

2.2.3.2判断功能案例

需求:模拟登录,给三次机会,并提示还有几次

2.2.3.2.1案例代码五:

packagecom.xuexi_03;

importjava.util.Scanner;

/*

*模拟登录,给三次机会,并提示还有几次。

*

*分析:

* A:定义两个字符串对象,用于存储已经存在的用户名和密码

* B:键盘录入用户名和密码

* C:拿键盘录入的用户名和密码和已经存在的用户名和密码进行比较

*如果内容相同,提示登录成功

*如果内容不同,提示登录失败,并提示还有几次机会

*/

public classStringTest {

public static voidmain(String[]args) {

//定义两个字符串对象,用于存储已经存在的用户名和密码

Stringusername ="admin";

Stringpassword ="admin";

//给三次机会,用for循环实现

for(intx=; x

//键盘录入用户名和密码

Scannersc =newScanner(System.in);

Stringname = sc.nextLine();

Stringpwd = sc.nextLine();

//拿键盘录入的用户名和密码和已经存在的用户名和密码进行比较

if(username.equals(name) &&password.equals(pwd)) {

break;

}else{

if((2-x) ==) {

}else{

System.out.println("登录失败,你还有"+(2-x)+"次机会");//2,1,0

2.2.4String类的获取功能

2.2.4.1获取方法演示

packagecom.xuexi_04;

/*

* String类的获取功能:

* int length():获取字符串的长度,其实也就是字符个数

* char charAt(int index):获取指定索引处的字符

* int indexOf(String str):获取str在字符串对象中第一次出现的索引

* String substring(int start):从start开始截取字符串

* String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end

*/

public classStringDemo {

public static voidmain(String[]args) {

//创建字符串对象

Strings ="helloworld";

//int length():获取字符串的长度,其实也就是字符个数

//char charAt(int index):获取指定索引处的字符

//int indexOf(String str):获取str在字符串对象中第一次出现的索引

//String substring(int start):从start开始截取字符串

//String substring(int start,int end):从start开始,到end结束截取字符串

}

}

2.2.4.2获取功能案例2.2.4.2.1案例代码六:

packagecom.xuexi_04;

/*

*遍历字符串(获取字符串中的每一个字符)

*/

public classStringTest {

public static voidmain(String[]args) {

//创建一个字符串对象

Strings ="abcde";

//原始做法

//用for循环改进

for(intx=; x

}

//用length()方法获取字符串的长度

for(intx=; x

}

}

}

2.2.4.2.2案例代码七:

packagecom.xuexi_04;

importjava.util.Scanner;

/*

*统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)

*

*分析:

* A:键盘录入一个字符串数据

* B:定义三个统计变量,初始化值都是

* C:遍历字符串,得到每一个字符

* D:拿字符进行判断

*假如ch是一个字符。

*大写:ch>='A'&& ch

*小写:ch>='a'&& ch

*数字:ch>='0'&& ch

* E:输出结果

*/

public classStringTest2 {

public static voidmain(String[]args) {

//键盘录入一个字符串数据

Scannersc =newScanner(System.in);

Strings = sc.nextLine();

//定义三个统计变量,初始化值都是

intbigCount =;

intsmallCount =;

intnumberCount =;

//遍历字符串,得到每一个字符

for(intx=; x

charch = s.charAt(x);

//拿字符进行判断

if(ch>='A'&&ch

bigCount++;

}else if(ch>='a'&&ch

smallCount++;

}else if(ch>='0'&&ch

numberCount++;

}else{

}

}

//输出结果

}

}

2.2.5String类的转换功能

2.2.5.1转换方法演示

char[] toCharArray():把字符串转换为字符数组

String toLowerCase():把字符串转换为小写字符串

String toUpperCase():把字符串转换为大写字符串

2.2.5.1.1案例代码八:

packagecom.xuexi_05;

/*

* String类的转换功能:

* char[] toCharArray():把字符串转换为字符数组

* String toLowerCase():把字符串转换为小写字符串

* String toUpperCase():把字符串转换为大写字符串

*字符串的遍历:

* A:length()加上charAt()

* B:把字符串转换为字符数组,然后遍历数组

*/

public classStringDemo {

public static voidmain(String[]args) {

//创建字符串对象

Strings ="abcde";

//char[] toCharArray():把字符串转换为字符数组

char[] chs = s.toCharArray();

for(intx=; x

}

//String toLowerCase():把字符串转换为小写字符串

//String toUpperCase():把字符串转换为大写字符串

}

}

2.2.5.2转换功能案例2.2.5.2.1案例代码九:

packagecom.xuexi_05;

importjava.util.Scanner;

/*

*键盘录入一个字符串,把该字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)

*分析:

* A:键盘录入一个字符串

* B:截取首字母

* C:截取除了首字母以外的字符串

* D:B转大写+C转小写

* E:输出即可

*/

public classStringTest {

public static voidmain(String[]args) {

//键盘录入一个字符串

Scannersc =newScanner(System.in);

Strings = sc.nextLine();

//截取首字母

Strings1 = s.substring(,1);

//截取除了首字母以外的字符串

Strings2 = s.substring(1);

//B转大写+C转小写

Strings3 = s1.toUpperCase()+s2.toLowerCase();

//输出即可

}

}

2.2.6String类的其它功能

2.2.6.1其它方法演示2.2.6.1.1案例代码十:

packagecom.xuexi_06;

/*

*去除字符串两端空格

* String trim()

*按照指定符号分割字符串

* String[]split(String str)

*/

public classStringDemo {

public static voidmain(String[]args) {

//创建字符串对象

Strings1 ="helloworld";

Strings2 =" helloworld ";

Strings3 =" hello world ";

//String[] split(String str)

//创建字符串对象

Strings4 ="aa,bb,cc";

String[] strArray = s4.split(",");

for(intx=; x

}

}

}

2.2.7String类的其它案例

2.2.7.1案例代码十一:

packagecom.xuexi_07;

/*

*把数组中的数据按照指定个格式拼接成一个字符串

*举例:int[] arr = ;

*输出结果:[1, 2, 3]

*分析:

* A:定义一个int类型的数组

* B:写方法实现把数组中的元素按照指定的格式拼接成一个字符串

* C:调用方法

* D:输出结果

*/

public classStringTest {

public static voidmain(String[]args) {

//定义一个int类型的数组

int[] arr = {1,2,3};

//写方法实现把数组中的元素按照指定的格式拼接成一个字符串

//调用方法

Strings = arrayToString(arr);

//输出结果

}

/*

*两个明确:

*返回值类型:String

*参数列表:int[] arr

*/

public staticStringarrayToString(int[] arr) {

Strings ="";

//[1, 2, 3]

s +="[";

for(intx=; x

if(x==arr.length-1){

s+= arr[x];

}else{

s+= arr[x];

s+=", ";

}

}

s +="]";

returns;

}

}

2.2.7.2案例代码十二:

packagecom.xuexi_07;

importjava.util.Scanner;

/*

*字符串反转

*举例:键盘录入”abc”

*输出结果:”cba”

*分析:

* A:键盘录入一个字符串

* B:写方法实现字符串的反转

* a:把字符串倒着遍历,得到的每一个字符拼接成字符串。

* b:把字符串转换为字符数组,然后对字符数组进行反转,最后在把字符数组转换为字符串

* C:调用方法

* D:输出结果

*/

public classStringTest2 {

public static voidmain(String[]args) {

//键盘录入一个字符串

Scannersc =newScanner(System.in);

Strings = sc.nextLine();

//写方法实现字符串的反转

//调用方法

Stringresult = reverse(s);

//输出结果

}

//把字符串转换为字符数组,然后对字符数组进行反转,最后在把字符数组转换为字符串

public staticStringreverse(Strings) {

//把字符串转换为字符数组

char[] chs = s.toCharArray();

//对字符数组进行反转

for(intstart=,end=chs.length-1;start

chartemp = chs[start];

chs[start]= chs[end];

chs[end]= temp;

}

//最后在把字符数组转换为字符串

Stringss =newString(chs);

returnss;

}

}

第3章StringBuilder类

3.1StringBuilder类概述

StringBuilder:是一个可变的字符串。字符串缓冲区类。

String和StringBuilder的区别:

String的内容是固定的

StringBuilder的内容是可变的

3.1.1+=拼接字符串耗费内存原因:

每次拼接都会产生新的字符串对象,而利用StringBuilder来拼接字符串自始至终用的都是同一个StringBuilder容器

3.2StringBuilder类的常用方法

A:构造方法:

StringBuilder()

B:成员方法:

public int capacity():返回当前容量 (理论值)

public int length():返回长度(已经存储的字符个数)

public StringBuilder append(任意类型):添加数据,并返回自身对象

public StringBuilder reverse():反转功能

3.2.1案例代码十三:

packagecom.xuexi_01;

/*

* StringBuilder:是一个可变的字符串。字符串缓冲区类。

* String和StringBuilder的区别:

* String的内容是固定的。

* StringBuilder的内容是可变的。

*构造方法:

* StringBuilder()

*成员方法:

* public int capacity():返回当前容量

* public intlength():返回长度(字符数)

*容量:理论值

*长度:实际值

*/

public classStringBuilderDemo {

public static voidmain(String[]args) {

//创建对象

StringBuildersb =newStringBuilder();

}

}

3.2.2案例代码十四:

packagecom.xuexi_02;

/*

*添加功能

* publicStringBuilder append(任意类型):添加数据,并返回自身对象

*反转功能

* publicStringBuilder reverse()

*/

public classStringBuilderDemo {

public static voidmain(String[]args) {

//创建对象

StringBuildersb =newStringBuilder();

//public StringBuilder append(任意类型)

//StringBuilder sb2 = sb.append("hello");

/*

System.out.println(sb == sb2); //true

*/

/*

sb.append("hello");

sb.append("world");

sb.append(true);

sb.append(100);

*/

//链式编程

sb.append("hello").append("world").append(true).append(100);

//public StringBuilder reverse()

sb.reverse();

}

}

3.3StringBuilder案例

3.3.1案例一需求:

StringBuilder和String通过方法完成相互转换

3.3.1.1案例代码十五:

packagecom.xuexi_03;

/*

* StringBuilder和String的相互转换

* StringBuilder -- String

* public StringtoString():通过toString()就可以实现把StringBuilder转成String

* String -- StringBuilder

* StringBuilder(Stringstr):通过构造方法就可以实现把String转成StringBuilder

*/

public classStringBuilderTest {

public static voidmain(String[]args) {

//StringBuilder -- String

/*

StringBuilder sb = new StringBuilder();

sb.append("hello").append("world");

String s = sb.toString();

*/

//String -- StringBuilder

Strings ="helloworld";

StringBuildersb =newStringBuilder(s);

}

}

3.3.2案例二需求:

利用StringBuilder把数组拼接成一个字符串

举例:

int[] arr = ;

结果:

[1, 2, 3]

3.3.2.1案例代码十六:

packagecom.xuexi_03;

/*

*把数组拼接成一个字符串

*举例:

* int[] arr =;

*结果:

* [1, 2, 3]

*/

public classStringBuilderTest2 {

public static voidmain(String[]args) {

//定义一个数组

int[] arr = {1,2,3};

//写方法实现拼接

//调用方法

Strings = arrayToString(arr);

//输出结果

}

/*

*两个明确:

*返回值类型:String

*参数列表:int[] arr

*/

public staticStringarrayToString(int[] arr) {

StringBuildersb =newStringBuilder();

//[1, 2, 3]

sb.append("[");

for(intx=; x

if(x==arr.length-1){

sb.append(arr[x]);

}else{

sb.append(arr[x]).append(", ");

}

}

sb.append("]");

Stringresult = sb.toString();

returnresult;

}

}

3.3.3案例三需求:

利用StringBuilder完成字符串反转

3.3.3.1案例代码十七:

packagecom.xuexi_03;

importjava.util.Scanner;

/*

*把字符串反转

*分析:

* A:键盘录入一个字符串

* B:写方法实现反转

* String --StringBuilder -- reverse() -- String

* C:调用方法

* D:输出结果

*/

public classStringBuilderTest3 {

public static voidmain(String[]args) {

//键盘录入一个字符串

Scannersc =newScanner(System.in);

Strings = sc.nextLine();

//写方法实现反转

//调用方法

Stringresult = myReverse(s);

//输出结果

}

/*

*两个明确:

*返回值类型:String

*参数列表:String

*/

public staticStringmyReverse(Strings) {

//String -- StringBuilder -- reverse() -- String

StringBuildersb =newStringBuilder(s);

sb.reverse();

Stringresult = sb.toString();

returnresult;

}

}

3.3.4案例四需求:

判断一个字符串是否是对称字符串

例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串

3.3.4.1案例代码十八:

packagecom.xuexi_03;

importjava.util.Scanner;

/*

*判断一个字符串是否是对称字符串

*例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串

*分析:

* A:键盘录入一个字符串

* B:写方法实现判断一个字符串是否是对称字符串

*把字符串反转,和反转前的字符串进行比较,如果内容相同,就说明是对称字符串

* C:调用方法

* D:输出结果

*/

public classStringBuilderTest4 {

public static voidmain(String[]args) {

//键盘录入一个字符串

Scannersc =newScanner(System.in);

Strings = sc.nextLine();

//写方法实现判断一个字符串是否是对称字符串

//调用方法

booleanb = isSymmetry(s);

//输出结果

}

/*

*两个明确:

*返回值类型:boolean

*参数列表:String s

*/

public static booleanisSymmetry(Strings) {

//把字符串反转,和反转前的字符串进行比较,如果内容相同,就说明是对称字符串

StringBuildersb =newStringBuilder(s);

sb.reverse();

Stringresult = sb.toString();

returnresult.equals(s);

}

}

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180514G09NWH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券