在之前的学习过程当中,咱们都在学习对象基本特征、对象的使用以及对象的关系。接下来咱们开始使用对象作事情,那么在使用对象作事情以前,咱们要学习一些API中提供的经常使用对象。首先在学习API中的Object类以前,先来学习如何使用API。
1.1 Java 的APIjava
Java 的API(API: Application(应用) Programming(程序) Interface(接口))
Java API就是JDK中提供给咱们使用的类,这些类将底层的代码实现封装了起来,咱们不须要关心这些类是如何实现的,只须要学习这些类如何使用便可。
在JDK安装目录下有个src.zip文件,这个文件解压缩后里面的内容是全部Java类的源文件。能够在其中查看相对应的类的源码。
咱们在每次查看类中的方法时,都打开源代码进行查看,这种方式过于麻烦。其实,咱们能够经过查帮助文档的方式,来了解Java提供的API如何使用。以下图操做:查找Object类数组
经过帮助文档中类与方法的介绍,咱们就可以使用这个类了。
1.2 Object类概述app
Object类是Java语言中的根类,即全部类的父类。它中描述的全部方法子类均可以使用。全部类在建立对象的时候,最终找的父类就是Object。
在Object类众多方法中,咱们先学习equals方法与toString方法,其余方法后面课程中会陆续学到。
1.3 equals方法学习
equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。
在开发中要比较两个对象是否相同,常常会根据对象中的属性值进行比较,也就是在开发常常须要子类重写equals方法根据对象的属性值进行比较。以下代码演示:
/*
描述人这个类,并定义功能根据年龄判断是不是同龄人
因为要根据指定类的属性进行比较,这时只要覆盖Object中的equals方法
在方法体中根据类的属性值进行比较
*/
class Person extends Object{
int age ;
//复写父类的equals方法,实现本身的比较方式
public boolean equals(Object obj) {
//判断当前调用equals方法的对象和传递进来的对象是不是同一个
if(this == obj){
return true;
}
//判断传递进来的对象是不是Person类型
if(!(obj instanceof Person)){
return false;
}
//将obj向下转型为Perosn引用,访问其属性
Person p = (Person)obj;
return this.age == p.age;
}
}
注意:在复写Object中的equals方法时,必定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,必定要进行类型转换,在转换以前必须进行类型判断。
1.4 toString方法ui
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
因为toString方法返回的结果是内存地址,而在开发中,常常须要按照对象的属性获得相应的字符串表现形式,所以也须要重写它。
class Person extends Object{
int age ;
//根据Person类的属性重写toString方法
public String toString() {
return "Person [age=" + age + "]";
}
}
第2章 String类2.1 String类的概述this
查阅API中的String类的描述,发现String 类表明字符串。Java 程序中的全部字符串字面值(如 "abc" )都做为此类的实例实现。
//演示字符串
String str = "itcast";
str = "传智播客";
线程
继续查阅API发现说字符串是常量;它们的值在建立以后不能更改,这是什么意思呢?其实就是说一旦这个字符串肯定了,那么就会在内存区域中就生成了这个字符串。字符串自己不能改变,但str变量中记录的地址值是能够改变的。设计
继续查API发现,字符串有大量的重载的构造方法。经过String类的构造方法能够完成字符串对象的建立,那么,经过使用双引号的方式建立对象与new的方式建立对象,有什么不一样呢?看以下程序与图解:
String s3 = "abc";
String s4 = new String("abc");
System.out.println(s3==s4);//false
System.out.println(s3.equals(s4));//true,
//由于String重写了equals方法,创建了字符串本身的判断相同的依据(经过字符串对象中的字符来判断)
对象
s3和s4的建立方式有什么不一样呢?
l s3建立,在内存中只有一个对象。这个对象在字符串常量池中
l s4建立,在内存中有两个对象。一个new的对象在堆中,一个字符串自己对象,在字符串常量池中继承
2.2 String类构造方法
构造方法是用来完成String对象的建立,下图中给出了一部分构造方法须要在API中找到,并可以使用下列构造方法建立对象。
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
String s1 = new String(); //建立String对象,字符串中没有内容[/align]
byte[] bys = new byte[]{97,98,99,100};
String s2 = new String(bys); // 建立String对象,把数组元素做为字符串的内容
String s3 = new String(bys, 1, 3); //建立String对象,把一部分数组元素做为字符串的内容,参数offset为数组元素的起始索引位置,参数length为要几个元素
char[] chs = new char[]{’a’,’b’,’c’,’d’,’e’};
String s4 = new String(chs); //建立String对象,把数组元素做为字符串的内容
String s5 = new String(chs, 0, 3);//建立String对象,把一部分数组元素做为字符串的内容,参数offset为数组元素的起始索引位置,参数count为要几个元素
String s6 = new String(“abc”); //建立String对象,字符串内容为abc
2.3 String类的方法查找
String类中有不少的经常使用的方法,咱们在学习一个类的时候,不要盲目的把全部的方法尝试去使用一遍,这时咱们应该根据这个对象的特色分析这个对象应该具有那些功能,这样你们应用起来更方便。
字符串是一个对象,那么它的方法必然是围绕操做这个对象的数据而定义的。咱们想一想字符串中有哪些功能呢?
l 字符串中有多少个字符?
[Java] 纯文本查看 复制代码
?
1
2
3
String str = "abcde";
int len = str.length();
System.out.println("len="+len);
l 获取部分字符串。
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
6
String str = "abcde";
String s1 = str.substring(1); //返回一个新字符串,内容为指定位置开始到字符串末尾的全部字符
String s2 = str.substring(2, 4);//返回一个新字符串,内容为指定位置开始到指定位置结束全部字符
System.out.println("str="+str);
System.out.println("s1="+s1);
System.out.println("s2="+s2);
2.4 String类中方法查找练习
前面给你们简单介绍了几个字符串中经常使用的方法,这个过程当中主要让你们学会如何去查阅API,如何找到本身想用的方法。接下来咱们来练习下字符串方法的查找。
l 字符串是否以指定字符串开头。结尾同理。
[Java] 纯文本查看 复制代码
?
1
2
3
4
String str = "StringDemo.java";
boolean b1 = str.startsWith("Demo");//判断是否以给定字符串开头
boolean b2 = str.startsWith("String");
boolean b3 = str.endsWith("java");//判断是否以给定字符串结尾
l 字符串中是否包含另外一个字符串。
[Java] 纯文本查看 复制代码
?
1
2
3
String str = "abcde";
int index = str.indexOf(“bcd”); //判断是否包含指定字符串,包含则返回第一次出现该字符串的索引,不包含则返回-1
boolean b2 = str.contains("bcd");//判断是否包含指定字符串,包含返回true,不包含返回false
l 将字符串转成一个字符数组。或者字节数组。
[Java] 纯文本查看 复制代码
?
1
2
3
String str = "abcde";
char[] chs = str.toCharArray();
byte[] bytes = str.getBytes();
l 判断两个字符串中的内容是否相同
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
String str = "abcde";
String str2 = "abcde";
String str3 = "hello";
boolean b1 = str.equals(str2);
boolean b2 = str.equals(str3);
l 获取该字符串对象中的内容
[Java] 纯文本查看 复制代码
?
1
2
3
String str = new String("hello");
System.out.println( str.toString() );
System.out.pintln( str );
直接打印引用类型变量时,默认调用该类型进行重写后的toString方法
下面的需求所对应的方法,要求你们本身动手在API中查找,并进行方法使用。
l 判断该字符串的内容是否为空的字符串
l 获取给定的字符,在该字符串中第一次出现的位置
l 获取该字符串中指定位置上的字符
l 把该字符串转换成 小写字符串
l 把该字符串转换成 大写字符串
l 在该字符串中,将给定的旧字符,用新字符替换
l 在该字符串中, 将给定的旧字符串,用新字符串替换
l 去除字符串两端空格,中间的不会去除,返回一个新字符串
2.5 String类方法使用练习
l 题目一:获取指定字符串中,大写字母、小写字母、数字的个数。
l 思路:1.为了统计大写字母、小写字母、数字的个数。建立3个计数的变量。
2.为了获取到字符串中的每一个字符,进行字符串的遍历,获得每一个字符。
3.对获得的字符进行判断,若是该字符为大写字母,则大写字母个数+1;若是该字符为小写字母,则小写字母个数+1;若是该字符为数字,则数字个数+1。
4.显示大写字母、小写字母、数字的个数
l 代码:
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
public static void method(String str){
int bigCount = 0; //大写字母的个数
int smallCount = 0; //小写字母的个数
int numberCount = 0; //数字的个数
for (int i=0; i < str.length(); i++) {
char ch = str.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("小写字母个数:"+smallCount);
System.out.println("数字个数:"+numberCount);
}
l 题目二:将字符串中,第一个字母转换成大写,其余字母转换成小写,并打印改变后的字符串。
l 思路:1.把字符串分为两个部分,第一部分为字符串中第一个字母,第二部分为剩下的字符串。
2.把第一部分字符串转换成大写字母,把第二部分字符串转换成小写字母
3.把两部分字符串链接在一块儿,获得一个完整的字符串
l 代码:
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
public static String convert(String str){
//获取第一部分为字符串
String start = str.substring(0,1);
//获取第二部分为字符串
String end = str.substring(1);
//把第一部分字符串转换成大写字母,把第二部分字符串转换成小写字母
String big = start.toUpperCase();
String small = end.toLowerCase();
//把两部分字符串链接在一块儿,获得一个完整的字符串
return big+small;
}
l 题目三:查询大字符串中,出现指定小字符串的次数。如“hellojava,nihaojava,javazhenbang”中查询出现“java”的次数。
l 思路:1.在大串中,查找小串出现的位置,出现了就次数+1
2.在上次小串出现位置的后面继续查找,须要更改大串的内容为上次未查询到的字符串。
3.回到第一步,继续查找小串出现的位置,直到大串中查询不到小串为止
l 代码:
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
public static int getCount(String big, String small){
int count = 0; //出现小串的次数
int index = -1;//出现小串的位置
/*
while的循环条件三步骤:
步骤一. big.indexOf(small) 获取小串在大串中出现的位置
步骤二. 把小串出现的位置,赋值给变量index
步骤三. 判断出现的位置是否为-1, 若是位置等于-1,说明大串中已经查询不到小串了;若是位置不等于-1,那么,进行循环,完成次数累加与修改大串的操做
*/
while ((index = big.indexOf(small)) != -1 ){
count++;//出现次数+1
//更改大串内容
big = big.substring(index+1);
}
return count;
}
第3章 字符串缓冲区3.1 StringBuffer类
在学习String类时,API中说字符串缓冲区支持可变的字符串,什么是字符串缓冲区呢?接下来咱们来研究下字符串缓冲区。
查阅StringBuffer的API,StringBuffer又称为可变字符序列,它是一个相似于 String 的字符串缓冲区,经过某些方法调用能够改变该序列的长度和内容。
原来StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中能够装不少字符串。而且可以对其中的字符串进行各类操做。
3.2 StringBuffer的方法使用
l 代码演示:
建立一个字符串缓冲区对象。用于存储数据。
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
6
StringBuffer sb = new StringBuffer();
sb.append("haha"); //添加字符串
sb.insert(2, "it");//在指定位置插入
sb.delete(1, 4);//删除
sb.replace(1, 4, "cast");//替换指定范围内的内容
String str = sb.toString();
l 注意:append、delete、insert、replace、reverse方法调用后,返回值都是当前对象本身,因此说,StringBuffer它能够改变字符序列的长度和内容。
3.3 StringBuffer类方法查找练习
下面的需求所对应的方法,要求你们本身动手在API中查找,并进行方法使用。
l 从指定位置开始,到末尾结束,截取该字符串缓冲区,返回新字符串
l 在原有字符串缓冲区内容基础上,删除指定位置上的字符
3.4 对象的方法链式调用
在咱们开发中,会遇到调用一个方法后,返回一个对象的状况。而后使用返回的对象继续调用方法。这种时候,咱们就能够把代码如今一块儿,如append方法同样,代码以下:
建立一个字符串缓冲区对象。用于存储数据。
StringBuffer sb = new StringBuffer();
添加数据。不断的添加数据后,要对缓冲区的最后的数据进行操做,必须转成字符串才能够。
String str = sb.append(true).append("hehe").toString();
3.5 StringBuffer练习
练习:
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
int[] arr = {34,12,89,68};将一个int[]中元素转成字符串 格式 [34,12,89,68]
public static String toString_2(int[] arr) {
StringBuffer sb = new StringBuffer();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1){
sb.append(arr+",");
}else{
sb.append(arr+"]");
}
}
return sb.toString();
}
l 不管多少数据,数据是什么类型都不重要,只要最终变成字符串就可使用StringBuffer这个容器
3.6 StringBuilder类
查阅API发现还有一个StringBuilder类,它也是字符串缓冲区,StringBuilder与它和StringBuffer的有什么不一样呢?
咱们阅读StringBuilder的API说明发现,它也是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用做 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种状况很广泛)。若是可能,建议优先采用该类,由于在大多数实现中,它比 StringBuffer 要快。
目前,咱们尚未涉及到线程与同步,知道结论StringBuilder比StringBuffer快便可。为何快,咱们会在学习线程时讲解。
第4章 总结4.1 知识点总结
l Object: 它是全部类的超类,祖宗类。java中全部的类都直接或间接的继承这个类
l 方法
public String toString() 返回当前对象中的内容, 对于Object类默认操做来讲,返回的对象的类型+@+内存地址值
public boolean equals(Object obj) 比较两个对象内容是否相同,对于Object类默认操做来讲,比较的是地址值
l String: 字符串类,字符串是常量;它们的值在建立以后不能更改
l 方法
boolean equals(Object obj) 判断两个字符串中的内容是否相同
boolean equalsIgnoreCase(String str) 判断两个字符串中的内容是否相同, 忽略大小写
boolean contains(String str) 判断该字符串中 是否包含给定的字符串
boolean startsWith(String str) 判断该字符串 是否以给定的字符串开头
boolean endsWith(String str) 判断该字符串 是否以给定的字符串结尾
boolean isEmpty() 判断该字符串的内容是否为空的字符串 ""
int length() 获取该字符串的长度
char charAt(int index) 获取该字符串中指定位置上的字符
String substring(int start) 从指定位置开始,到末尾结束,截取该字符串,返回新字符串
String substring(int start,int end) 从指定位置开始,到指定位置结束,截取该字符串,返回新字符串
int indexOf(int ch ) 获取给定的字符,在该字符串中第一次出现的位置
int indexOf(String str) 获取给定的字符串,在该字符串中第一次出现的位置
int indexOf(int ch,int fromIndex) 从指定位置开始,获取给定的字符,在该字符
byte[] getBytes() 把该字符串 转换成 字节数组
char[] toCharArray() 把该字符串 转换成 字符数组
String replace(char old,char new) 在该字符串中,将给定的旧字符,用新字符替换
在之前的学习过程当中,咱们都在学习对象基本特征、对象的使用以及对象的关系。接下来咱们开始使用对象作事情,那么在使用对象作事情以前,咱们要学习一些API中提供的经常使用对象。首先在学习API中的Object类以前,先来学习如何使用API。
1.1 Java 的API
Java 的API(API: Application(应用) Programming(程序) Interface(接口))
Java API就是JDK中提供给咱们使用的类,这些类将底层的代码实现封装了起来,咱们不须要关心这些类是如何实现的,只须要学习这些类如何使用便可。
在JDK安装目录下有个src.zip文件,这个文件解压缩后里面的内容是全部Java类的源文件。能够在其中查看相对应的类的源码。
咱们在每次查看类中的方法时,都打开源代码进行查看,这种方式过于麻烦。其实,咱们能够经过查帮助文档的方式,来了解Java提供的API如何使用。以下图操做:查找Object类
经过帮助文档中类与方法的介绍,咱们就可以使用这个类了。
1.2 Object类概述
Object类是Java语言中的根类,即全部类的父类。它中描述的全部方法子类均可以使用。全部类在建立对象的时候,最终找的父类就是Object。
在Object类众多方法中,咱们先学习equals方法与toString方法,其余方法后面课程中会陆续学到。
1.3 equals方法
equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。
在开发中要比较两个对象是否相同,常常会根据对象中的属性值进行比较,也就是在开发常常须要子类重写equals方法根据对象的属性值进行比较。以下代码演示:
/*
描述人这个类,并定义功能根据年龄判断是不是同龄人
因为要根据指定类的属性进行比较,这时只要覆盖Object中的equals方法
在方法体中根据类的属性值进行比较
*/
class Person extends Object{
int age ;
//复写父类的equals方法,实现本身的比较方式
public boolean equals(Object obj) {
//判断当前调用equals方法的对象和传递进来的对象是不是同一个
if(this == obj){
return true;
}
//判断传递进来的对象是不是Person类型
if(!(obj instanceof Person)){
return false;
}
//将obj向下转型为Perosn引用,访问其属性
Person p = (Person)obj;
return this.age == p.age;
}
}
注意:在复写Object中的equals方法时,必定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,必定要进行类型转换,在转换以前必须进行类型判断。
1.4 toString方法
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
因为toString方法返回的结果是内存地址,而在开发中,常常须要按照对象的属性获得相应的字符串表现形式,所以也须要重写它。
class Person extends Object{
int age ;
//根据Person类的属性重写toString方法
public String toString() {
return "Person [age=" + age + "]";
}
}
第2章 String类2.1 String类的概述
查阅API中的String类的描述,发现String 类表明字符串。Java 程序中的全部字符串字面值(如 "abc" )都做为此类的实例实现。
//演示字符串
String str = "itcast";
str = "传智播客";
继续查阅API发现说字符串是常量;它们的值在建立以后不能更改,这是什么意思呢?其实就是说一旦这个字符串肯定了,那么就会在内存区域中就生成了这个字符串。字符串自己不能改变,但str变量中记录的地址值是能够改变的。
继续查API发现,字符串有大量的重载的构造方法。经过String类的构造方法能够完成字符串对象的建立,那么,经过使用双引号的方式建立对象与new的方式建立对象,有什么不一样呢?看以下程序与图解:
String s3 = "abc";
String s4 = new String("abc");
System.out.println(s3==s4);//false
System.out.println(s3.equals(s4));//true,
//由于String重写了equals方法,创建了字符串本身的判断相同的依据(经过字符串对象中的字符来判断)
s3和s4的建立方式有什么不一样呢?
l s3建立,在内存中只有一个对象。这个对象在字符串常量池中
l s4建立,在内存中有两个对象。一个new的对象在堆中,一个字符串自己对象,在字符串常量池中
2.2 String类构造方法
构造方法是用来完成String对象的建立,下图中给出了一部分构造方法须要在API中找到,并可以使用下列构造方法建立对象。
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
String s1 = new String(); //建立String对象,字符串中没有内容[/align]
byte[] bys = new byte[]{97,98,99,100};
String s2 = new String(bys); // 建立String对象,把数组元素做为字符串的内容
String s3 = new String(bys, 1, 3); //建立String对象,把一部分数组元素做为字符串的内容,参数offset为数组元素的起始索引位置,参数length为要几个元素
char[] chs = new char[]{’a’,’b’,’c’,’d’,’e’};
String s4 = new String(chs); //建立String对象,把数组元素做为字符串的内容
String s5 = new String(chs, 0, 3);//建立String对象,把一部分数组元素做为字符串的内容,参数offset为数组元素的起始索引位置,参数count为要几个元素
String s6 = new String(“abc”); //建立String对象,字符串内容为abc
2.3 String类的方法查找
String类中有不少的经常使用的方法,咱们在学习一个类的时候,不要盲目的把全部的方法尝试去使用一遍,这时咱们应该根据这个对象的特色分析这个对象应该具有那些功能,这样你们应用起来更方便。
字符串是一个对象,那么它的方法必然是围绕操做这个对象的数据而定义的。咱们想一想字符串中有哪些功能呢?
l 字符串中有多少个字符?
[Java] 纯文本查看 复制代码
?
1
2
3
String str = "abcde";
int len = str.length();
System.out.println("len="+len);
l 获取部分字符串。
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
6
String str = "abcde";
String s1 = str.substring(1); //返回一个新字符串,内容为指定位置开始到字符串末尾的全部字符
String s2 = str.substring(2, 4);//返回一个新字符串,内容为指定位置开始到指定位置结束全部字符
System.out.println("str="+str);
System.out.println("s1="+s1);
System.out.println("s2="+s2);
2.4 String类中方法查找练习
前面给你们简单介绍了几个字符串中经常使用的方法,这个过程当中主要让你们学会如何去查阅API,如何找到本身想用的方法。接下来咱们来练习下字符串方法的查找。
l 字符串是否以指定字符串开头。结尾同理。
[Java] 纯文本查看 复制代码
?
1
2
3
4
String str = "StringDemo.java";
boolean b1 = str.startsWith("Demo");//判断是否以给定字符串开头
boolean b2 = str.startsWith("String");
boolean b3 = str.endsWith("java");//判断是否以给定字符串结尾
l 字符串中是否包含另外一个字符串。
[Java] 纯文本查看 复制代码
?
1
2
3
String str = "abcde";
int index = str.indexOf(“bcd”); //判断是否包含指定字符串,包含则返回第一次出现该字符串的索引,不包含则返回-1
boolean b2 = str.contains("bcd");//判断是否包含指定字符串,包含返回true,不包含返回false
l 将字符串转成一个字符数组。或者字节数组。
[Java] 纯文本查看 复制代码
?
1
2
3
String str = "abcde";
char[] chs = str.toCharArray();
byte[] bytes = str.getBytes();
l 判断两个字符串中的内容是否相同
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
String str = "abcde";
String str2 = "abcde";
String str3 = "hello";
boolean b1 = str.equals(str2);
boolean b2 = str.equals(str3);
l 获取该字符串对象中的内容
[Java] 纯文本查看 复制代码
?
1
2
3
String str = new String("hello");
System.out.println( str.toString() );
System.out.pintln( str );
直接打印引用类型变量时,默认调用该类型进行重写后的toString方法
下面的需求所对应的方法,要求你们本身动手在API中查找,并进行方法使用。
l 判断该字符串的内容是否为空的字符串
l 获取给定的字符,在该字符串中第一次出现的位置
l 获取该字符串中指定位置上的字符
l 把该字符串转换成 小写字符串
l 把该字符串转换成 大写字符串
l 在该字符串中,将给定的旧字符,用新字符替换
l 在该字符串中, 将给定的旧字符串,用新字符串替换
l 去除字符串两端空格,中间的不会去除,返回一个新字符串
2.5 String类方法使用练习
l 题目一:获取指定字符串中,大写字母、小写字母、数字的个数。
l 思路:1.为了统计大写字母、小写字母、数字的个数。建立3个计数的变量。
2.为了获取到字符串中的每一个字符,进行字符串的遍历,获得每一个字符。
3.对获得的字符进行判断,若是该字符为大写字母,则大写字母个数+1;若是该字符为小写字母,则小写字母个数+1;若是该字符为数字,则数字个数+1。
4.显示大写字母、小写字母、数字的个数
l 代码:
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
public static void method(String str){
int bigCount = 0; //大写字母的个数
int smallCount = 0; //小写字母的个数
int numberCount = 0; //数字的个数
for (int i=0; i < str.length(); i++) {
char ch = str.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("小写字母个数:"+smallCount);
System.out.println("数字个数:"+numberCount);
}
l 题目二:将字符串中,第一个字母转换成大写,其余字母转换成小写,并打印改变后的字符串。
l 思路:1.把字符串分为两个部分,第一部分为字符串中第一个字母,第二部分为剩下的字符串。
2.把第一部分字符串转换成大写字母,把第二部分字符串转换成小写字母
3.把两部分字符串链接在一块儿,获得一个完整的字符串
l 代码:
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
public static String convert(String str){
//获取第一部分为字符串
String start = str.substring(0,1);
//获取第二部分为字符串
String end = str.substring(1);
//把第一部分字符串转换成大写字母,把第二部分字符串转换成小写字母
String big = start.toUpperCase();
String small = end.toLowerCase();
//把两部分字符串链接在一块儿,获得一个完整的字符串
return big+small;
}
l 题目三:查询大字符串中,出现指定小字符串的次数。如“hellojava,nihaojava,javazhenbang”中查询出现“java”的次数。
l 思路:1.在大串中,查找小串出现的位置,出现了就次数+1
2.在上次小串出现位置的后面继续查找,须要更改大串的内容为上次未查询到的字符串。
3.回到第一步,继续查找小串出现的位置,直到大串中查询不到小串为止
l 代码:
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
public static int getCount(String big, String small){
int count = 0; //出现小串的次数
int index = -1;//出现小串的位置
/*
while的循环条件三步骤:
步骤一. big.indexOf(small) 获取小串在大串中出现的位置
步骤二. 把小串出现的位置,赋值给变量index
步骤三. 判断出现的位置是否为-1, 若是位置等于-1,说明大串中已经查询不到小串了;若是位置不等于-1,那么,进行循环,完成次数累加与修改大串的操做
*/
while ((index = big.indexOf(small)) != -1 ){
count++;//出现次数+1
//更改大串内容
big = big.substring(index+1);
}
return count;
}
第3章 字符串缓冲区3.1 StringBuffer类
在学习String类时,API中说字符串缓冲区支持可变的字符串,什么是字符串缓冲区呢?接下来咱们来研究下字符串缓冲区。
查阅StringBuffer的API,StringBuffer又称为可变字符序列,它是一个相似于 String 的字符串缓冲区,经过某些方法调用能够改变该序列的长度和内容。
原来StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中能够装不少字符串。而且可以对其中的字符串进行各类操做。
3.2 StringBuffer的方法使用
l 代码演示:
建立一个字符串缓冲区对象。用于存储数据。
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
6
StringBuffer sb = new StringBuffer();
sb.append("haha"); //添加字符串
sb.insert(2, "it");//在指定位置插入
sb.delete(1, 4);//删除
sb.replace(1, 4, "cast");//替换指定范围内的内容
String str = sb.toString();
l 注意:append、delete、insert、replace、reverse方法调用后,返回值都是当前对象本身,因此说,StringBuffer它能够改变字符序列的长度和内容。
3.3 StringBuffer类方法查找练习
下面的需求所对应的方法,要求你们本身动手在API中查找,并进行方法使用。
l 从指定位置开始,到末尾结束,截取该字符串缓冲区,返回新字符串
l 在原有字符串缓冲区内容基础上,删除指定位置上的字符
3.4 对象的方法链式调用
在咱们开发中,会遇到调用一个方法后,返回一个对象的状况。而后使用返回的对象继续调用方法。这种时候,咱们就能够把代码如今一块儿,如append方法同样,代码以下:
建立一个字符串缓冲区对象。用于存储数据。
StringBuffer sb = new StringBuffer();
添加数据。不断的添加数据后,要对缓冲区的最后的数据进行操做,必须转成字符串才能够。
String str = sb.append(true).append("hehe").toString();
3.5 StringBuffer练习练习:[Java] 纯文本查看 复制代码?01020304050607080910111213int[] arr = {34,12,89,68};将一个int[]中元素转成字符串 格式 [34,12,89,68]public static String toString_2(int[] arr) { StringBuffer sb = new StringBuffer(); sb.append("["); for (int i = 0; i < arr.length; i++) { if(i!=arr.length-1){ sb.append(arr+","); }else{ sb.append(arr+"]"); } } return sb.toString(); }l 不管多少数据,数据是什么类型都不重要,只要最终变成字符串就可使用StringBuffer这个容器3.6 StringBuilder类查阅API发现还有一个StringBuilder类,它也是字符串缓冲区,StringBuilder与它和StringBuffer的有什么不一样呢?咱们阅读StringBuilder的API说明发现,它也是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用做 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种状况很广泛)。若是可能,建议优先采用该类,由于在大多数实现中,它比 StringBuffer 要快。 目前,咱们尚未涉及到线程与同步,知道结论StringBuilder比StringBuffer快便可。为何快,咱们会在学习线程时讲解。第4章 总结4.1 知识点总结l Object: 它是全部类的超类,祖宗类。java中全部的类都直接或间接的继承这个类l 方法public String toString() 返回当前对象中的内容, 对于Object类默认操做来讲,返回的对象的类型+@+内存地址值 public boolean equals(Object obj) 比较两个对象内容是否相同,对于Object类默认操做来讲,比较的是地址值 l String: 字符串类,字符串是常量;它们的值在建立以后不能更改l 方法 boolean equals(Object obj) 判断两个字符串中的内容是否相同 boolean equalsIgnoreCase(String str) 判断两个字符串中的内容是否相同, 忽略大小写 boolean contains(String str) 判断该字符串中 是否包含给定的字符串 boolean startsWith(String str) 判断该字符串 是否以给定的字符串开头 boolean endsWith(String str) 判断该字符串 是否以给定的字符串结尾 boolean isEmpty() 判断该字符串的内容是否为空的字符串 "" int length() 获取该字符串的长度 char charAt(int index) 获取该字符串中指定位置上的字符 String substring(int start) 从指定位置开始,到末尾结束,截取该字符串,返回新字符串 String substring(int start,int end) 从指定位置开始,到指定位置结束,截取该字符串,返回新字符串 int indexOf(int ch ) 获取给定的字符,在该字符串中第一次出现的位置 int indexOf(String str) 获取给定的字符串,在该字符串中第一次出现的位置 int indexOf(int ch,int fromIndex) 从指定位置开始,获取给定的字符,在该字符byte[] getBytes() 把该字符串 转换成 字节数组 char[] toCharArray() 把该字符串 转换成 字符数组String replace(char old,char new) 在该字符串中,将给定的旧字符,用新字符替换 String replace(String old,String new) 在该字符串中, 将给定的旧字符串,用新字符串替换 String trim() 去除字符串两端空格,中间的不会去除,返回一个新字符串 String toLowerCase() 把该字符串转换成 小写字符串 String toUpperCase() 把该字符串转换成 大写字符串 int indexOf(String str,int fromIndex) 从指定位置开始,获取给定的字符串,在该字符串中第一次出现的位置 l StringBuffer/StringBuilder:l 方法public StringBuffer append(String str) 在原有字符串缓冲区内容基础上,在末尾追加新数据 public StringBuffer insert(int offset,String str) 在原有字符串缓冲区内容基础上,在指定位置插入新数据 public StringBuffer deleteCharAt(int index) 在原有字符串缓冲区内容基础上,删除指定位置上的字符 public StringBuffer delete(int start,int end) 在原有字符串缓冲区内容基础上,删除指定范围内的多个字符 public StringBuffer replace(int start,int end,String str)在原有字符串缓冲区内容基础上,将指定范围内的多个字符 用给定的字符串替换 public StringBuffer reverse() 将字符串缓冲区的内容 反转 "abc"----"cba" public String substring(int start) 从指定位置开始,到末尾结束,截取该字符串缓冲区,返回新字符串 public String substring(int start,int end) 从指定位置开始,到指定位置结束,截取该字符串缓冲区,返回新字符串 String replace(String old,String new) 在该字符串中, 将给定的旧字符串,用新字符串替换 String trim() 去除字符串两端空格,中间的不会去除,返回一个新字符串 String toLowerCase() 把该字符串转换成 小写字符串 String toUpperCase() 把该字符串转换成 大写字符串 int indexOf(String str,int fromIndex) 从指定位置开始,获取给定的字符串,在该字符串中第一次出现的位置 l StringBuffer/StringBuilder:l 方法public StringBuffer append(String str) 在原有字符串缓冲区内容基础上,在末尾追加新数据 public StringBuffer insert(int offset,String str) 在原有字符串缓冲区内容基础上,在指定位置插入新数据 public StringBuffer deleteCharAt(int index) 在原有字符串缓冲区内容基础上,删除指定位置上的字符 public StringBuffer delete(int start,int end) 在原有字符串缓冲区内容基础上,删除指定范围内的多个字符 public StringBuffer replace(int start,int end,String str)在原有字符串缓冲区内容基础上,将指定范围内的多个字符 用给定的字符串替换 public StringBuffer reverse() 将字符串缓冲区的内容 反转 "abc"----"cba" public String substring(int start) 从指定位置开始,到末尾结束,截取该字符串缓冲区,返回新字符串 public String substring(int start,int end) 从指定位置开始,到指定位置结束,截取该字符串缓冲区,返回新字符串