Java_String、StringBuffer、StringBuiler
来源:互联网 发布:淘宝售中流程 编辑:程序博客网 时间:2024/05/26 12:04
提纲:
1. String概述
2. String类的构造方法
3. String类的判断功能
4. String类的获取功能
5. String类的转换功能
6. String练习
7. String类的常见面试题
8. StringBuffer类
9. StringBuilder类
10. 基本数据类型对象包装类
一、String概述
1、字符串是一个特殊的对象
2、一旦初始化不能被改变
如:String s = “abc”;
s = “ddd”;
System.out.println(s);
结果为:ddd
注:但不能证明字符串被改变,改变的只是地址,原先s指向“abc”,现在指向“ddd”
3、String str = “abc”与String str = new String(“abc”)有什么区别
他俩是一个意思,查看API可知String有带参数的构造函数。前者更简单一些
二、String类的构造方法
1.常见的构造方法
Public String():空构造//空字符序列
public String(byte[] bytes):把字节数组转成字符串//byte[] b = {98,93,101};
//String s = new String(b);
public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
public String(char[] value):把字符数组转成字符串//char[] ch = {‘a’,’c’,’d’};
//String s = new String(ch);
public String(char[] value,int index,int count):把字符数组的一部分转成字符串
public String(String original):把字符串常量值转成字符串//String s = new String(“orginal”);
三、String类的判断功能
boolean equals(Object obj)//:比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str)//:比较字符串的内容是否相同,忽略大小写
boolean contains(String str)//:判断大字符串中是否包含小字符串
boolean startsWith(String str)//:判断字符串是否以某个指定的字符串开头
boolean endsWith(String str)//:判断字符串是否以某个指定的字符串结尾
boolean isEmpty()//:判断字符串是否为空。
四、String的获取功能
int length()//:获取字符串的长度。
char charAt(int index)//:获取指定索引位置的字符
int indexOf(int ch)//:返回指定字符在此字符串中第一次出现处的索引。
int indexOf(String str)//:返回指定字符串在此字符串中第一次出现处的索引。
int indexOf(int ch,int fromIndex)//:返回指定字符在此字符串中从指定位置后第一次出现处的索引。
int indexOf(String str,int fromIndex)//:返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
lastIndexOf
String substring(int start)//:从指定位置开始截取字符串,默认到末尾。
String substring(int start,int end)//:从指定位置开始到指定位置结束截取字符串。
五、String类的转换功能
byte[] getBytes()//:把字符串转换为字节数组。
char[] toCharArray()//:把字符串转换为字符数组。
static String valueOf(char[] chs)//:把字符数组转成字符串。
static String valueOf(int i)//:把int类型的数据转成字符串。
注意:String类的valueOf方法可以把任意类型的数据转成字符串。
String toLowerCase()//:把字符串转成小写。
String toUpperCase()//:把字符串转成大写。
String concat(String str)//:把字符串拼接。
六、String类的简单练习
通过对以上内容的学习,利用上面的知识作如下的练习加以巩固。
1. 练习一,去除字符串两端空格
代码:
public static String myTrim(String str) { int start = 0,end = str.length()-1; while(start<=end&&str.charAt(start)==' ') start++; while(start<=end&&str.charAt(end)==' ') end--; return str.substring(start,end+1); }
- 练习二:将字符串反转
代码:
/* 1 将字符串变成数组 2 对数组反转 3 将数组变化层字符串 */ public static String reverseString(String s) { char[] chs = s.toCharArray(); reverse(chs); return new String(chs); } private static void reverse(char[] arr) { for(int start=0,end=arr.length-1;start<end;start++,end--) { swap(arr,start,end); } } private static void swap(char[] arr,int x,int y) { char temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; }
- 练习三:获取一个字符串在另一个字符串中出现的次数
代码:
思路: 1,定义一个计数器 2,获取kk第一次出现的位置 3,从第一次出现位置后剩余的字符串中继续获取kk出现的位置 每获取一次就计数一次 4,当获取不到indexOf返回-1时计数完成 */ public static int getSubCount(String str,String key) { int count = 0; int index = 0; while((index = str.indexOf(key))!=-1) { sop("str="+str); str = str.substring(index+key.length()); count++; } return count; } //练习三,方式2 public static int getSubCount_2(String str,String key) { int count = 0; int index = 0; while((index=str.indexOf(key,index))!=-1) { sop("index="+index); index = index+key.length(); count++; } return count; }第二种方式利用int indexOf(int ch,int fromIndex)方法,获取查找位置,就不用获取子串了,更简单高效
- 练习四:获取两个字符串中最大相同子串。
代码:
思路: 1,将短的那个子串按照长度递减的方式获取到 2,将每获取到的子串中判断是否包含,如果包含,找到! public static String getMaxSubString(String s1,String s2) { String max = "",min = ""; max = (s1.length()>s2.length())?s1:s2; min = (max==s1)?s2:s1; sop("max="+max+"....."); sop("min="+min+"....."); for(int x=0; x<min.length(); x++) { for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++) { String temp = min.substring(y,z); if(max.contains(temp)) return temp; } } return ""; }
七、String类的常见面试题
1.判断定义为String类型的s1和s2是否相等
String s1 = “abc”;
String s2 = “abc”;
System.out.println(s1 == s2); //true
System.out.println(s1.equals(s2)); //true
2.下面这句话在内存中创建了几个对象?
String s1 = new String(“abc”); //2
3.判断定义为String类型的s1和s2是否相等
String s1 = new String(“abc”);
String s2 = “abc”;
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
4.判断定义为String类型的s1和s2是否相等
String s1 = “a” + “b” + “c”;//常量运算,编译时已经确定
String s2 = “abc”;
System.out.println(s1 == s2); //true
System.out.println(s1.equals(s2)); //true
5.判断定义为String类型的s1和s2是否相等
String s1 = “ab”;
String s2 = “abc”;
String s3 = s1 + “c”;//变量运算,运行时动态分配,从而是新的abc 不是s2指向的
System.out.println(s3 == s2);//false
System.out.println(s3.equals(s2)); //true
八、StringBuffer类
- StringBuffer类是字符串缓冲区,是一个容器。
缓冲区的特点:
(1).长度是可变化的
(2).可以字节操作多个数据类型
(3).最终会通过toString方法变成字符窜
(4).修改后返回同一个对象,并不新建对象
什么时候用缓冲区:当数据类型不确定,数据个数也不确定,最后要得到字符串的时候,用缓冲区,比数组方便。
2.StringBuffer具有的方法
构造函数:
StringBuffer()初始容量为16字符
StringBuffer(int capacity)指定初始容量
StringBuffer(String str)初始化内容
(1)存储方法:
StringBuffer append()函数:支持基本数据类型的添加(除了byte和short),将指定数据作为 添加到已有数据的结尾处
例:
StringBuffer sb = new StringBuffer();
sb.append(“abc”).append(true).append(34);//方法调用链
(2)插入方法
StringBuffer insert(index,数据)将数据插入到指定位置,可以传入多种数据类型
(3)删除方法
StringBuffer delete(int start,int end):删除缓冲区中的数据,包含start,不包含end
StringBuffer deleteCharAt():删除指定位置字符
(4)修改方法
StringBuffer replace(int start,int end,String str)将指定子串替换掉
void setCharAt(int index,char ch)替换指定位置的字符,无返回值
(5)反转方法
StringBuffer reverse();
(6)转存到数组
void getChars(int srcBegin,int scEnd,char[] dst,int dstBegin)
//获取缓冲区的指定数据并按字符存入指定数组的指定位置,这类方法都要注意角标越界异常
九、StringBuilder类
与StringBuffer的区别:StringBuffer是线程同步,StringBuildr是线程不同步,由于简化同步操作,后者效率更高。多线程建议使用StringBuffer,单线程建议使用StringBuilder。
十、基本数据类型对象包装类
1.基本数据类型和它们对应的包装类如下:
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
将基本数据类型包装后能提供更多的方法,实现更强大的功能。最常见的作用:用于基本数据类型和字符串类型之间做转换。
基本数据类型转换成字符串:
基本数据类型+””
基本数据类型.toString(基本数据类型值)
字符串转成基本数据类型:
X a = X.parseX(String):X代表基本数据类型的包装类
若字符串书写格式不是基本数据,会报数据格式异常
2.重要的方法
十进制转换
Integer.toBinaryString();转换成二进制
Integer.toHexString();转换成十六进制
Integer.toOctalString();转换成八进制
其他进制转换成十进制
parseInt(String s,int radix)接收指定进制的数字字符串,转换成十进制
Integer()构造方法
Integer(String s)接收数字字符串
Integer.intValue();基本数据包装类转换成基本数据类型
3. 1.5版本新特性 基本数据类型自动装箱
Integer x=4;数值自动装箱变成对象
x=x+2;这个语句先进行自动拆箱,变成int类型,加法运算后,再自动装箱
注意:若x=null,会抛空指针异常
下面代码:
Integer a=128;
Integer b=128;
System.out.println(a==b);//打印结果为false
Integer a=127; Integer b=127; System.out.println(a==b);//打印结果为true
当数值在byte范围内时,对于新特性,不会开辟新的空间
- Java_String、StringBuffer、StringBuiler
- String StringBuiler StringBuffer
- String、StringBuffer、StringBuiler区别
- java_String和Stringbuffer区别
- 正确使用String 、StringBuffer 、StringBuiler
- 5-String、StringBuffer和StringBuiler
- JAVA_String类及StringBuffer类
- 黑马程序员--字符串缓冲区StringBuffer 和 StringBuiler
- Java_String
- Java_String
- Java_String
- JAVA_String
- Java_String
- Java面向对象——String类 StringBuffer类 StringBuiler类
- 黑马程序员 Java面向对象——String类 StringBuffer类 StringBuiler类
- 黑马程序员_学习笔记:8) 常见API:String、StringBuffer、StringBuiler、Integer
- java_String类
- Java_String Format
- Javascript中实现不加new关键字的构造函数
- 3D打印技术之切片引擎(7)
- 呼吸轮播
- Android Api Demos登顶之路(九十二)Graphics-->TypeFace
- 研究生期间知识体系规划
- Java_String、StringBuffer、StringBuiler
- 资源网站整理
- Spring Boot实践应用开发(9)
- 发表SCI或EI类英文文章的一些投稿经验[转载]
- java IO流学习总结
- 2012年NOIP提高组 借教室
- 面试题8:输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
- LeetCode Algorithms #283 <Move Zeroes>
- 2013年NOIP提高组 火柴排队