day15_String类+StringBuffer+StringBuilder
2015-01-02 23:48
162 查看
01-常用对象API(String类-特点) 现在我们将重点转到了这些对象的使用
这里面的其实啊这是两个字符串对象,而这个s吧,它刚才指向的abc吧,现在指向了nba啊,abc没有变吧,s是一个引用型的变量,它可以指向这个,可以指向那个,但是abc不变,String其实是一个类,
下面再说另外一个事
怎么就是真也,说一下,在字符串建立时,在内存中有一个字符串缓冲区,我们先说第一句话好了,String s = "abc",我这里面吧,卡来了字符串吧,它就会先到这个字符串缓冲区中,去查找有abc吗,没有,我们就建了abc,建完以后,再把这个abc的地址值给这个s啊,接着,到了这句话了:String s1 ="abc",它也去字符串常量池中去查找有没有abc啊,有啊,就把这个已有的abc的地址值赋给s1,那就意味着s和s1指向的是同一个地址
/**
* 演示字符串定义的第一种方式,并明确字符串常量池的特点.
* 池中没有就建立,池中有,直接用。
*/
private
static void stringDemo1() {
String s = "abc";//"abc"存储在字符串常量池中。
// s = "nba";
String s1 = "abc";
System.out.println(s==s1);//true?
// System.out.println("s="+s);
}
另外一个示例
解释一下为什么就为false
String s = "abc";这句话一执行是在字符串常量池当中创建了一个abc字符串,并把地址赋值给了s引用型变量String s1 = new String("abc");是在堆内存中用new的方式创建了一个string对象,这个对象在构造的时候是不是接受了一个字符串对象,这个new,并没有在字符串常量池中做任何事情
02-常用对象API(String类-构造函数)
65,66这些都是数字吧,到字符串里面变成了字符吗 ,进行acsii码的查表转换
03-常用对象API(String类-常见功能-获取_1)
这里面说一下,我们重点掌握的是面向对象的分析方法,进行分析
假如你见到这样一个字符中:"abcd"你认为它具备什么样的功能比较好一些
比如说有几个字符啊:
你说有四个,别逗了,你认为它有几个字符是不是它自己最清楚啊,这就是面向对象的思考方法,它是不是应该具备这样的功能来告诉我它有几个字符啊,紧接着第二个思考,这个字符串它的第一个字符是啥,第二个是啥啊,第三一个,如果它有b这个字符它在哪个位置上啊,以些类推,我们想要操作字符串,就要先找到对象,然后找其方法就可以了吗,所以也我们就把
讲解第一个:
获取
获取字符串中的字符的个数(长度啊)
这就是思考方法:
你觉得它要有这功能的话也,这功能的返回值是什么啊,有没有参数,这样去查找方法
记住啊:我们分析完,我们认为有这样的功能,可以到文档里面去查,不能一个一个去看,你怎么去查啊,先看返回值类型,,这就是当年我给你们讲的函数的时候,一直在强调的,函数无非就是两个明确,要么结果,要么未知内容,对象分析的时候,我们也这么去考虑问题,就特别的方便 ,字符串如果有这样的功能,它应该是什么样的结果,有什么样的参数,只要能想清楚这事,,想对以后我就到这个字符串中api中来查这个方法
以后就用这种思想去思考分析(根据参数类型,或者返回值这样去查找,)
04-常用对象API(String类-常见功能-获取_2)
05-常用对象API(String类-常见功能-转换)
小知识点:java最小组成单位是不是字节啊,ascii记录的是美国标准信息交换码,这里面是记录的老美的东西啊,计算机的二进制与数字相对应这就叫做编码表,我们是不是写中文啊,有一个通过的叫做uncode码全世界通用啊,中国编码是怎么编的啊,就是一个中文两个字节编的,而且这两个字节,最高位都是1,所以你看到的是负数,我跟你讲什么数据到计算机里面都是数字,中国最早使用的码表是gb2312表,大概装了6,7千个文字,后面又扩展了gbk,大概装了2万多文字,,后面又扩展gb18多少
String转换的有一个方法是静态方法能将基本数据类型转换成一个字符串,这个方法是String.valueOf(基本数据类型)
// System.out.println(String.valueOf(4)+1);
// System.out.println(""+4+1)
这两个都ok
2,转换。
* 2.1 将字符串变成字符串数组(字符串的切割)
* String[] split(String regex):涉及到正则表达式.
* 2.2 将字符串变成字符数组。
* char[]toCharArray();
* 2.3 将字符串变成字节数组。
* byte[]getBytes();
* 2.4 将字符串中的字母转成大小写。
* StringtoUpperCase():大写
* StringtoLowerCase():小写
* 2.5 将字符串中的内容进行替换
* Stringreplace(char oldch,char
newch);
* Stringreplace(String s1,String s2);
* 2.6 将字符串两端的空格去除。
* Stringtrim();
* 2.7 将字符串进行连接 。
* String concat(string);
private
static void stringMethodDemo_2(){
String s = "张三,李四,王五";
String[] arr = s.split(",");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
System.out.println(chs[i]);
}
s = "ab你";
byte[] bytes = s.getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
System.out.println("Abc".toUpperCase());
String s1 = "java";
String s2 = s1.replace('q',
'z');
System.out.println(s1==s2);//true
System.out.println("-"+" ab c ".trim()+"-");
}
06-常用对象API(String类-常见功能-判断)
3,判断
* 3.1 两个字符串内容是否相同啊?
* booleanequals(Object obj);
* booleanequalsIgnoreCase(string
str);忽略大写比较字符串内容。
* 3.2 字符串中是否包含指定字符串?
* booleancontains(string str);
* 3.3 字符串是否以指定字符串开头。是否以指定字符串结尾。
* booleanstartsWith(string);
* boolean endsWith(string);
private
static void stringMethodDemo_3(){
String s = "abc";
System.out.println(s.equals("ABC".toLowerCase()));
System.out.println(s.equalsIgnoreCase("ABC"));
System.out.println(s.contains("cc"));
String str = "ArrayDemo.java";
System.out.println(str.startsWith("Array"));
System.out.println(str.endsWith(".java"));
System.out.println(str.contains("Demo"));
}
07-常用对象API(String类-常见功能-比较)
* 4,比较。
private
static void stringMethodDemo_4() {
System.out.println("abc".compareTo("aqz"));
}
基本数值如果能参与比较的数值,它用的只有是大于小于这样的操作运算符,而对于对象的比较用的是方法完成的,因为对象怎么比较是不是对象自己最清楚
08-常用对象API(String类-intern方法)
//intern():对字符串池进行操作的
String s1 = new String("abc");
String s2 = s1.intern();
System.out.println(s1==s2);
这个intern我们怎么去理解呢:
这个new的是不是两个对象,这个abc是不是在这个new里面进行维护的啊,而这个s1.intern是不是获取池中的数据啊,这个数据是不是共享数据,如果你要是像上面这样写的话也,是不是把这个abc存到这个池里面去啊s1.intern这是不是从池里面取啊,如果池中有则返回,否则,将此 String 对象添加到池中,并返回此 String 对象的引用。
09-常用对象API(String类-练习1-字符串数组排序)
1,给定一个字符串数组。按照字典顺序进行从小到大的排序。
* {"nba","abc","cba","zz","qq","haha"}
*
*
* 2,一个子串在整串中出现的次数。
* "nbaernbatynbauinbaopnba"
*
*
*
* 3,两个字符串中最大相同的子串。
*
*
*
* 4,模拟一个trim功能一致的方法。
10-常用对象API(String类-练习2-子串的次数)
对于这个事例吧,我使用的是for循环,显示没有使用while循环好,对于什么时候使用while和什么时候for比较好也,我还要仔细认真好好考虑一下
还有3,4两个练习就自己去做一下,再说一下,做练习 的时候吧,一定要把代码实现得最优的形式
常用对象API(StringBuffer类-特点&添加功能)
常用对象API(StringBuffer类-插入&删除&查找&修改)
常用对象API(StringBuffer类-可变长度数组)
StringBuffer:就是字符串缓冲区。
* 用于存储数据的容器。
* 特点:
* 1,长度的可变的。
* 2,可以存储不同类型数据。
* 3,最终要转成字符串进行使用。
* 4,可以对字符串进行修改。
*
*
* 既然是一个容器对象。应该具备什么功能呢?
* 1,添加:
* StringBuffer append(data);
* StringBuffer insert(index,data);
* 2,删除:
* StringBuffer delete(start,end):包含头,不包含尾。
* StringBuffer deleteCharAt(int index):删除指定位置的元素
* 3,查找:
* char charAt(index);
* int indexOf(string);
* int lastIndexOf(string);
* 4,修改:
* StringBuffer replace(start,end,string);
* void setCharAt(index,char);
*
* 增删改查 C(create)U(update)R(read)D(delete)
private
static void bufferMethodDemo_1(){
StringBuffer sb = new StringBuffer("abce");
// sb.append("xixi");
sb.insert(2, "qq");
System.out.println(sb.toString());
}
public
static void bufferMethodDemo(){
//创建缓冲区对象。
StringBuffer sb = new StringBuffer();
sb.append(4).append(false);//.append("haha");
sb.insert(1, "haha");
// sb.append(true);
System.out.println(sb);
}
private
static void bufferMethodDemo_2() {
StringBuffer sb = new StringBuffer("abce");
// sb.delete(1, 3);//ae
//清空缓冲区。
// sb.delete(0,sb.length());
// sb = newStringBuffer();
// sb.replace(1, 3, "nba");
// sb.setCharAt(2, 'q');
// sb.setLength(10);
// System.out.println("sb:"+sb);
// System.out.println("len:"+sb.length());
System.out.println(sb.reverse());
}
常用对象API(StringBuilder类)
jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder
*
* 不同的是:
* StringBuffer是线程同步的。通常用于多线程。
* StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。
*
* jdk升级:
* 1,简化书写。
* 2,提高效率。
* 3,增加安全性。
常用对象API(StringBuilder类-练习)
这里面的其实啊这是两个字符串对象,而这个s吧,它刚才指向的abc吧,现在指向了nba啊,abc没有变吧,s是一个引用型的变量,它可以指向这个,可以指向那个,但是abc不变,String其实是一个类,
下面再说另外一个事
怎么就是真也,说一下,在字符串建立时,在内存中有一个字符串缓冲区,我们先说第一句话好了,String s = "abc",我这里面吧,卡来了字符串吧,它就会先到这个字符串缓冲区中,去查找有abc吗,没有,我们就建了abc,建完以后,再把这个abc的地址值给这个s啊,接着,到了这句话了:String s1 ="abc",它也去字符串常量池中去查找有没有abc啊,有啊,就把这个已有的abc的地址值赋给s1,那就意味着s和s1指向的是同一个地址
/**
* 演示字符串定义的第一种方式,并明确字符串常量池的特点.
* 池中没有就建立,池中有,直接用。
*/
private
static void stringDemo1() {
String s = "abc";//"abc"存储在字符串常量池中。
// s = "nba";
String s1 = "abc";
System.out.println(s==s1);//true?
// System.out.println("s="+s);
}
另外一个示例
解释一下为什么就为false
String s = "abc";这句话一执行是在字符串常量池当中创建了一个abc字符串,并把地址赋值给了s引用型变量String s1 = new String("abc");是在堆内存中用new的方式创建了一个string对象,这个对象在构造的时候是不是接受了一个字符串对象,这个new,并没有在字符串常量池中做任何事情
02-常用对象API(String类-构造函数)
65,66这些都是数字吧,到字符串里面变成了字符吗 ,进行acsii码的查表转换
03-常用对象API(String类-常见功能-获取_1)
这里面说一下,我们重点掌握的是面向对象的分析方法,进行分析
假如你见到这样一个字符中:"abcd"你认为它具备什么样的功能比较好一些
比如说有几个字符啊:
你说有四个,别逗了,你认为它有几个字符是不是它自己最清楚啊,这就是面向对象的思考方法,它是不是应该具备这样的功能来告诉我它有几个字符啊,紧接着第二个思考,这个字符串它的第一个字符是啥,第二个是啥啊,第三一个,如果它有b这个字符它在哪个位置上啊,以些类推,我们想要操作字符串,就要先找到对象,然后找其方法就可以了吗,所以也我们就把
讲解第一个:
获取
获取字符串中的字符的个数(长度啊)
这就是思考方法:
你觉得它要有这功能的话也,这功能的返回值是什么啊,有没有参数,这样去查找方法
记住啊:我们分析完,我们认为有这样的功能,可以到文档里面去查,不能一个一个去看,你怎么去查啊,先看返回值类型,,这就是当年我给你们讲的函数的时候,一直在强调的,函数无非就是两个明确,要么结果,要么未知内容,对象分析的时候,我们也这么去考虑问题,就特别的方便 ,字符串如果有这样的功能,它应该是什么样的结果,有什么样的参数,只要能想清楚这事,,想对以后我就到这个字符串中api中来查这个方法
以后就用这种思想去思考分析(根据参数类型,或者返回值这样去查找,)
04-常用对象API(String类-常见功能-获取_2)
05-常用对象API(String类-常见功能-转换)
小知识点:java最小组成单位是不是字节啊,ascii记录的是美国标准信息交换码,这里面是记录的老美的东西啊,计算机的二进制与数字相对应这就叫做编码表,我们是不是写中文啊,有一个通过的叫做uncode码全世界通用啊,中国编码是怎么编的啊,就是一个中文两个字节编的,而且这两个字节,最高位都是1,所以你看到的是负数,我跟你讲什么数据到计算机里面都是数字,中国最早使用的码表是gb2312表,大概装了6,7千个文字,后面又扩展了gbk,大概装了2万多文字,,后面又扩展gb18多少
String转换的有一个方法是静态方法能将基本数据类型转换成一个字符串,这个方法是String.valueOf(基本数据类型)
// System.out.println(String.valueOf(4)+1);
// System.out.println(""+4+1)
这两个都ok
2,转换。
* 2.1 将字符串变成字符串数组(字符串的切割)
* String[] split(String regex):涉及到正则表达式.
* 2.2 将字符串变成字符数组。
* char[]toCharArray();
* 2.3 将字符串变成字节数组。
* byte[]getBytes();
* 2.4 将字符串中的字母转成大小写。
* StringtoUpperCase():大写
* StringtoLowerCase():小写
* 2.5 将字符串中的内容进行替换
* Stringreplace(char oldch,char
newch);
* Stringreplace(String s1,String s2);
* 2.6 将字符串两端的空格去除。
* Stringtrim();
* 2.7 将字符串进行连接 。
* String concat(string);
private
static void stringMethodDemo_2(){
String s = "张三,李四,王五";
String[] arr = s.split(",");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
System.out.println(chs[i]);
}
s = "ab你";
byte[] bytes = s.getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
System.out.println("Abc".toUpperCase());
String s1 = "java";
String s2 = s1.replace('q',
'z');
System.out.println(s1==s2);//true
System.out.println("-"+" ab c ".trim()+"-");
}
06-常用对象API(String类-常见功能-判断)
3,判断
* 3.1 两个字符串内容是否相同啊?
* booleanequals(Object obj);
* booleanequalsIgnoreCase(string
str);忽略大写比较字符串内容。
* 3.2 字符串中是否包含指定字符串?
* booleancontains(string str);
* 3.3 字符串是否以指定字符串开头。是否以指定字符串结尾。
* booleanstartsWith(string);
* boolean endsWith(string);
private
static void stringMethodDemo_3(){
String s = "abc";
System.out.println(s.equals("ABC".toLowerCase()));
System.out.println(s.equalsIgnoreCase("ABC"));
System.out.println(s.contains("cc"));
String str = "ArrayDemo.java";
System.out.println(str.startsWith("Array"));
System.out.println(str.endsWith(".java"));
System.out.println(str.contains("Demo"));
}
07-常用对象API(String类-常见功能-比较)
* 4,比较。
private
static void stringMethodDemo_4() {
System.out.println("abc".compareTo("aqz"));
}
基本数值如果能参与比较的数值,它用的只有是大于小于这样的操作运算符,而对于对象的比较用的是方法完成的,因为对象怎么比较是不是对象自己最清楚
08-常用对象API(String类-intern方法)
//intern():对字符串池进行操作的
String s1 = new String("abc");
String s2 = s1.intern();
System.out.println(s1==s2);
这个intern我们怎么去理解呢:
这个new的是不是两个对象,这个abc是不是在这个new里面进行维护的啊,而这个s1.intern是不是获取池中的数据啊,这个数据是不是共享数据,如果你要是像上面这样写的话也,是不是把这个abc存到这个池里面去啊s1.intern这是不是从池里面取啊,如果池中有则返回,否则,将此 String 对象添加到池中,并返回此 String 对象的引用。
09-常用对象API(String类-练习1-字符串数组排序)
1,给定一个字符串数组。按照字典顺序进行从小到大的排序。
* {"nba","abc","cba","zz","qq","haha"}
*
*
* 2,一个子串在整串中出现的次数。
* "nbaernbatynbauinbaopnba"
*
*
*
* 3,两个字符串中最大相同的子串。
*
*
*
* 4,模拟一个trim功能一致的方法。
10-常用对象API(String类-练习2-子串的次数)
对于这个事例吧,我使用的是for循环,显示没有使用while循环好,对于什么时候使用while和什么时候for比较好也,我还要仔细认真好好考虑一下
还有3,4两个练习就自己去做一下,再说一下,做练习 的时候吧,一定要把代码实现得最优的形式
常用对象API(StringBuffer类-特点&添加功能)
常用对象API(StringBuffer类-插入&删除&查找&修改)
常用对象API(StringBuffer类-可变长度数组)
StringBuffer:就是字符串缓冲区。
* 用于存储数据的容器。
* 特点:
* 1,长度的可变的。
* 2,可以存储不同类型数据。
* 3,最终要转成字符串进行使用。
* 4,可以对字符串进行修改。
*
*
* 既然是一个容器对象。应该具备什么功能呢?
* 1,添加:
* StringBuffer append(data);
* StringBuffer insert(index,data);
* 2,删除:
* StringBuffer delete(start,end):包含头,不包含尾。
* StringBuffer deleteCharAt(int index):删除指定位置的元素
* 3,查找:
* char charAt(index);
* int indexOf(string);
* int lastIndexOf(string);
* 4,修改:
* StringBuffer replace(start,end,string);
* void setCharAt(index,char);
*
* 增删改查 C(create)U(update)R(read)D(delete)
private
static void bufferMethodDemo_1(){
StringBuffer sb = new StringBuffer("abce");
// sb.append("xixi");
sb.insert(2, "qq");
System.out.println(sb.toString());
}
public
static void bufferMethodDemo(){
//创建缓冲区对象。
StringBuffer sb = new StringBuffer();
sb.append(4).append(false);//.append("haha");
sb.insert(1, "haha");
// sb.append(true);
System.out.println(sb);
}
private
static void bufferMethodDemo_2() {
StringBuffer sb = new StringBuffer("abce");
// sb.delete(1, 3);//ae
//清空缓冲区。
// sb.delete(0,sb.length());
// sb = newStringBuffer();
// sb.replace(1, 3, "nba");
// sb.setCharAt(2, 'q');
// sb.setLength(10);
// System.out.println("sb:"+sb);
// System.out.println("len:"+sb.length());
System.out.println(sb.reverse());
}
常用对象API(StringBuilder类)
jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder
*
* 不同的是:
* StringBuffer是线程同步的。通常用于多线程。
* StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。
*
* jdk升级:
* 1,简化书写。
* 2,提高效率。
* 3,增加安全性。
常用对象API(StringBuilder类-练习)
相关文章推荐
- Java学习笔记(四)--封装 String类 StringBuffer StringBuilder
- String StringBuffer StringBuilder的区别
- java.lang.StringBuilder/java.lang.StringBuffer
- String StringBuffer StringBuilder 异同
- String StringBuffer StringBuilder
- String StringBuffer StringBuilder
- String/StringBuffer/StringBuilder的区别
- String StringBuffer StringBuilder
- string stringbuffer stringbuilder
- String\StringBuffer\StringBuilder
- String/StringBuffer/StringBuilder详细对比
- String StringBuffer StringBuilder总结
- String StringBuilder StringBuffer 对比 总结得非常好
- String+StringBuilder+StringBuffer
- String Stringbuilder Stringbuffer性能
- Java 工具类总结(2): 再也不怕表单字符串处理 - String / StringBuilder / StringBuffer
- Java String\StringBuffer\Stringbuilder
- String StringBuffer StringBuilder三者的区别
- Java中对于String StringBuffer StringBuilder的理解
- string stringBuffer stringBuilder