黑马程序员_String-StringBuffer-StringBuilder
来源:互联网 发布:国家纳米科学中心 知乎 编辑:程序博客网 时间:2024/05/14 17:34
一、String
String对象在内存中的存储位置
public static void main(String[] args) {
String str1="abc";
String str2="abc";
System.out.println(str1==str2);
}
String对象内容存储在内存中的常量池中;创建字符串对象时会在内存中查找,如果已经存在,则不会新开辟空间,所以示例中的返回值为true。
String常用方法:
1、获取:
(1)、int length():获取长度,字符串中包含的字符数,也就是字符串的长度,字符串是方法,数组是属性
(2)、根据位置获取位置上的某个字符
char charAt(int index)
(3)根据字符获取该字符在字符串中的位置
int indexOf(int ch):返回的是ch在字符串中第一次出现的位置
int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取str在字符串中的出现的位置
int indexOf(String str):返回的是ch在字符串中第一次出现的位置
int indexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中的出现的位置
2、判断:
(1)、字符串中是否包含一个子串
boolean contains(CharSequence s) 特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在,所以,也可以用于对指定判断是否包含。
if(str.indexOf("aa")!=-1) 该方法既可以判断,也可以获取出现的位置
(2)、字符串中是否有内容
boolean isEmpty() 原理是判断长度是否为0,“” null不一样
(3)、字符串是否以指定内容开头
boolean startsWith(str)
(4)、字符串是否以指定内容结尾
boolean endsWith(str)
(5)、判断字符串内容是否相同
boolean equals(str);
(6)、判断内容是否相同,并忽略大小写
boolean equalsIgnoreCase(str);
(7)、示例:
public class Demo{ public static void method_is(){ String str = "ArrayDemo.java"; //判断是否以array开头 sop(str.startsWith("Array")); //判断是否以.java结尾 sop(str.endsWith(".java")); //是否包含demo sop(str.contains("Demo")); } public static void method_get(){ String str = "abcdef"; //长度 sop(str.length()); //根据索引获取字符 sop(str.charAt(4));//当访问到字符串中不存在的角标时,会发生角标越界(StringIndexOutOfBoundsException ) //根据字符获取索引 sop(str.indexOf('a')); //在指定位置,根据字符获取索引 sop(str.indexOf('a',40));//如果没有找到,返回-1 //反向索引一个字符出现的位置 sop(str.lastIndexOf('f')); } public static void sop(Object obj){ System.out.println(obj); } public static void main(String[] args){ method_is(); method_get(); } }
3、转换
(1)、将字符数组转成字符串
构造函数:
String(char[] value)
String(char[] value, int offset, int count)将字符数组一部分转成字符串
静态方法:
static String copyValueOf(char[] data);
static String copyValueOf(char[] data,int offset,int count);
static String ValueOf(char[] data);
(2)、将字符串转成字符数组
byte[] getBytes()
byte[] getBytes(Charset charset)
(3)、将字节数组转成字符串
String(byte[] value)
String(byte[] value, int offset, int count)将字节数组一部分转成字符串
(4)、将字符串转成字节数组
char[] toCharArray() 将此字符串转换为一个新的字符数组
(5)、将基本数据类型转成字符串
static String valueOf(double d)
static String valueOf(int i)
特殊:字符串恶化字节数组在转换过程中,是可以指定编码表的。
(6)、转换
将字符串转换成大写或小写
String toUpperCase();
String toLowerCase();
(7)、示例:
public class Demo{ public static void main(String[] args){ method_trans(); } public static void method_trans(){ char[] arr = {'a','b','c','d','e','f'}; String s = new String(arr,1,3); sop("s="+s); String s1="zhangsan"; char [] ch=s1.toCharArray(); for(int x=0;x<ch.length;x++){ sop("ch="+ch[x]); } } public static void sop(Object obj){ System.out.println(obj); } }
4、切割和替换
(1)、替换
String replace(char oldChar,char newChar)
(2)、切割
String[] split(String str)
(3)、子串,获取字符串中的一部分,
String substring(int beginIndex)
String substring(int beginIndex, int endIndex) //包含头,不包含尾部
(4)、示例:
public class Demo{ public static void main(String[] args){ method_sub(); } public static void method_split(){ String s = "zhangsan,lisi,wangwu"; String[] arr = s.split(","); for(int i=0;i<arr.length;i++){ sop(arr[i]); } } public static void method_sub(){ String s = "abcdef"; sop(s.substring(2)); //从指定位置开始到结尾,如果交表不存在,会出现字符串角标越界异常 sop(s.substring(2,4)); //包含头,不包含尾部 。s.substring(0,s.length()); } public static void sop(Object obj){ System.out.println(obj); } }
5、比较和去除空格
(1)、将字符串转成大写或者小写
[1]、String toUpperCase();
[2]、String toLowerCase();
(2)、将字符串两端的多个空格去除
String trim();
(3)、对两个字符串进行自然顺序的比较
int compareTo(String);
如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。返回 他们 ascle 码值相减的结果
(4)、示例:
public class Demo{ public static void main(String[] args){ method_7(); } public static void method_split(){ String s = "zhangsan,lisi,wangwu"; String[] arr = s.split(","); for(int i=0;i<arr.length;i++){ sop(arr[i]); } } public static void method_sub(){ String s = "abcdef"; sop(s.substring(2)); //cdef sop(s.substring(2,4)); //cd 包含头,不包含尾部 } public static void method_7(){ String s = " Hello Java "; sop(s.toLowerCase()); sop(s.toUpperCase()); sop(s.trim()); String s1 = "acc"; String s2 = "aaa"; sop(s1.compareTo(s2));//2 sop(s2.compareTo(s1));//-2 } public static void sop(Object obj){ System.out.println(obj); } }
二、StringBuffer
Stringbuffer:
Stringbuffer是字符串缓冲区,是一个容器
长度可变化
可以操作多个数据类型
最终会通过toString方法变成字符串
StringBuffer可以对字符串内容进行增删
StringBuffer常用方法:
1、存储
StringBuffer append():将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(index,数据):可以将数据插入到指定位置上去
2、删除
StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end
StringBuffer deleteCharAt(index):删除指定位置的字符
sb.delete(0,sb.length()); 清空缓冲区,删除全部
sb.delete(2,3); 删除一个字符,应该用 sb.deleteCharAt(2);
3、获取
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start,int end) 注意,返回的是string,不是StringBuffer
4、修改
StringBuffer replace(start,end,string);
StringBuffer reverse()
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
5、示例:
public class Demo{ public static void main(String[] args){ method_getChars(); } public static void method_getChars(){ StringBuffer sb = new StringBuffer("abcdef"); char[] chs = new char[4]; sb.getChars(1,4,chs,1); for(int x=0;x<chs.length;x++){ sop("chs["+x+"]="+chs[x]+";"); } } public static void method_update(){ StringBuffer sb = new StringBuffer("abcde"); sb.replace(1,4,"java"); sop(sb.toString()); } public static void method_del(){ StringBuffer sb = new StringBuffer("abcde"); sb.delete(0,sb.length()); //sb.delete(1,3);//删掉 bc,2两个,因为不包含尾 sop(sb.toString()); } public static void method_add(){ StringBuffer sb = new StringBuffer(); sb.append("abc").append(true).append(34);//方法调用链 sb.insert(1,"qq"); sop(sb.toString()); } public static void sop(Object obj){ System.out.println(obj); } }
三、StringBuilder
StringBuilder
1、JDK 1.5 之后,出现了StringBuilder
2、一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
(1)、StringBuffer 是线程同步 多线程也可以,自身有判断锁,但是效率低
(2)、StringBuilder 是线程不同步 不是多线程的,不用判断锁,所以单线程都用这个
3、升级三个因素
(1)、提高效率
(2)、简化书写
(3)、提高安全性
4、StringBuilder >与 StringBuffe的区别
(1) 、在执行速度方面的比较:StringBuilder > StringBuffer
(2) 、StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。
(3)、 StringBuilder:线程非安全的;StringBuffer:线程安全
- 黑马程序员_String-StringBuffer-StringBuilder
- 黑马程序员_String类-StringBuffer
- 黑马程序员_String和StringBuffer
- 黑马程序员_String类及StringBuffer和StringBuilder概述和功能、基本数据类型
- 黑马程序员_String类及StringBuffer和StringBuilder概述和功能、基本数据类型
- 黑马程序员_String类型以及StringBuilder
- 黑马程序员_String类和StringBuffer
- 黑马程序员_String和StringBuffer总结
- 黑马程序员_String类 StringBuffer类
- 黑马程序员_String类和StringBuffer类
- 黑马程序员_string类和StringBuffer类
- 黑马程序员--String&StringBuffer&StringBuilder
- 黑马程序员-String、StringBuffer、StringBuilder
- 黑马程序员-------String,StringBuffer,StringBuilder
- 黑马程序员-------String StringBuffer StringBuilder
- 黑马程序员-stringbuffer和stringbuilder
- 黑马程序员-String-StringBuffer-StringBuilder
- 黑马程序员_笔记十四_String和StringBuffer类
- sk_buff经典分析
- mmc0: Too large timeout requested for CMD25
- 面向对象系统设计备忘
- 黑马程序员——关键字
- 【九度】题目1512:用两个栈实现队列
- 黑马程序员_String-StringBuffer-StringBuilder
- 基于OPenCV和MFC的读图程序
- ubuntu下修改date
- 一般函数指针和类的成员函数指针
- Entity framework for mysql 连接插件
- java 纯sql 操作blob..字段
- android-GestureDetector的使用-随心
- Linux驱动开发之四-----LED改进测试(增加自动创建设备节点)
- (转)cocos2d-x学习笔记(三)让精灵按照自己设定的运动轨迹行动(曲线移动)。(以椭圆轨迹为例)