-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
一、
1,字符串是一个特殊的对象
String s1 = “abc”//s1是一个类类型变量,”abc”是一个对象;
2,字符串最大的特点:一旦被初始化就不可以改变
String s1 = “abc”;
S1 = “aaa”;
System.out.println(s1);
结果:aaa
注意:这里虽然结果是aaa,但是字符串并没有改变,abc依然在(堆)内存中,改变的只是s1,它所指向的内存地址改变了
String s = new String();
String s1 = ““;
二者一样,只是后者简单,一般都选择后者
举例:
分析控制台结果:
1,s1是一个对象而s2是两个对象,所以false,而equals比较的是内存地址,s1和s2指向的内存地址相同
2,Sting类重写了Object类中的equals方法,该方法用于判断字符串是否相同
举例:
package com.heima.biji;
public class Demo_String {
public static void main(String[] args) {
String s1 = "abc";
String s2 = new String("abc");
String s3 = "abc";
// System.out.println(s1==s2);
//System.out.println(s1.equals(s2));
System.out.println(s1==s3);
}
}
控制台:
true
分析结果:对于字符串常量,存放在常量池中,s1指向一个字符串,s3也指向字符串,s3在初始化时候发现abc已经在内存中存在,所以就不用再开辟空间
二、String类的常用方法
1,判断
1.1 boolean equals(Object);//判断传入的字符串是否与调用的字符串字符序列是否相同,相同就返回true否则false
1.2 boolean equalsIgnoreCase(string);//判断传入的字符串是否与调用的字符串字符序列是否相同,不区分大小写,相同就返回true否则false
1.3 boolean contains(string);//判断传入的字符串是否被调用的字符串包含
1.4 boolean startsWith(string);//判断调用的字符串是否以传入的字符串开头
1.5 boolean endsWith(string);//判断调用的字符串是否以传入的字符串结尾
1.6 boolean isEmpty();//判断字符串是否为空
2,获取
2.1 int length();//获取字符串的长度
2.2 char charAt(index);//通过索引获取对应的字符
2.3 int indexOf(int ch);//通过传入int数或者是字符找对应索引
int idnexOf(int ch,fromIndex);//在指定fromIndex的位置查找传入的字符
2.4 int indexOf(string str);//通过传入字符串查找字符串所对应的索引
int idnexOf(string str,fromIndex);//通过指定fromIndex的位置查找传入的字符串
2.5 int lastIndexOf(ch);//通过传入的字符从后向前找字符的索引值,把从后向前第一次找到的索引值返回
int lastIndexOf(ch,fromIndex)://通过指定fromIndex的位置,从后向前查找字符,把从后向前第一次找到的索引值返回
2.6 int lastIndexOf(string);//通过传入的字符串,从后向前查找,将第一次找到字符串中第一个字符的索引返回
int lastIndexOf(string,fromIndex)://通过指定fromIndex的位置,从后向前查找对应字符串,将第一次找到字符串中第一个字符的索引返回
2.7 String substring(start);//通过传入的索引值开始向后截取,截取的是索引到length
String substring(start,end);//通过传入的两个索引值截取,有开始有结尾,包含头不包含尾
3,转换
3.1 byte[] getBytes();//编码,让计算机看的懂的,用默认的编码表,将字符串转换成字节数组
byte[] getBytes(String)//用指定的编码表进行编码
3.2 char[] toCharArray();//将字符串转换成字符数组
3.3 static String copyValueOf(char[]);//将字符数组转换成字符串
static String copyValueOf(char[] data, int offset, int count);//将字符数组转换字符串,通过offset开始,截取count个
3.4 static String valueOf(char[]);//将字符数组转换成字符串
static String valueOf(char[] data, int offset, int count);//将字符数组转换字符串,通过offset开始,截取count个
3.5 static String valueOf(int);//将一个int数转换成字符串
static String valueOf(double);
static String valueOf(boolean);
...
3.6 static String valueOf(object);
和object.toString():结果是一样的。
3.7 String toLowerCase()://将字符串全部转换为小写
String toUpperCase()://将字符串全班转换为大写
3.8 "abc".concat("kk");//将两个字符串相连接,产生新的字符串
4,替换。
4.1 String replace(oldChar,newChar);//将newChar替换OldChar,如果OldChar不存在,原字符串直接赋值给替换后字符串
4.2 String replace(string,string);
5,切割。
String[] split(regex);//通过regex切割字符串,切割后会产生一个字符串数组
String s = "金三胖 郭美美 李天一";
String[] arr = s.split(" ");
6,去除字符串两端空格。
String trim();
7,比较
String str = "ab";
String str1 = "bc";
int num = str.compareTo(str1);//如果str比str1大的话,返回的正数
8,练习
/**
* 需求:获取一个字符串在另一个字符串中出现的次数
* aaoocdooefoohoo
* 思路:1,定义一个计数器
* 2,获取oo第一次出现的位置
* 3,从第一次出现的位置后剩余字符串中继续获取oo出现的位置,每获取一次就计数一次
* 4,当获取不到时候,计数完成
*/
package com.heima.biji;
//定义计数器
public class getSubCount {
public static void main(String[] args) {
String str = "aaoocdooefoohoo";
sop("count=" + getSubCount(str, "oo"));
}
private 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;
}
//定义输出方法
private static void sop(String str) {
System.out.println(str);
}
}
控制台:
str=aaoocdooefoohoo
str=cdooefoohoo
str=efoohoo
str=hoo
count=4
1,其中关键代码理解:kk出现位置2+kk长度2=4,即下个子字符串从4开始
2,substring返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。
注意:这里不适合用切割split(regs),因为会有kk在最左边和最右边的情况,这样切割的话,左右就会出现null
三、
1,StringBuffer是字符串缓冲区
是一个容器
特点:长度可以变化
可以字节操作多个数据类型
最终会通过toString方法变成字符串
2,StringBuffer方法
/**
* 1,添加,插入
* StringBuffer append():始终将这些字符添加到生成器的末端
* StringBuffer insert(index,数据):在指定的点添加字符。
* 2,删除delete
* StringBuffer delete():删除缓冲区中的数据,包含start,不包含end
* StringBuffer deleteCharAt(index);删除指定位置的字符
* 3,获取
* char charAt(int Index): 返回此序列中指定索引处的 char值。
* int indexOf(String str): 返回第一次出现的指定子字符串在该字符串中的索引
* int lastIndexOf(String str):返回最右边出现的指定子字符串在此字符串中的索引
* int length():返回长度(字符数
* String substring(int start,int end):返回一个新的 String,它包含此序列当前所包含字符的子序列
* 4,修改
* StringBuffer replace(start,end,string):使用给定 String 中的字符替换从[start,end)
* void setCharAt(int index,char ch):替换指定index的字符
* 5,反转
* StringBuffer reverse():反转
* 6,将缓冲区中指定数组存储到指定字符数组中
* void getChars(int srcBegin, int srcEnd,char[] dst,int dstBegin)
*/
实例:
package com.heima.biji;
public class Demo_StringBuffer {
public static void main(String[] args) {
Method_add();
Method_delete();
Method_update();
Method_reverse();
Method_getChars();
}
public static void Method_reverse() {
StringBuffer sb = new StringBuffer("abcde");
sb.reverse();
sop(sb.toString());
}
public static void Method_add() {
StringBuffer sb = new StringBuffer();
//方法调用链,因为此方法返回值是对象,对象可以调用方法,所以可以链式书写
sb.append("abc").append(true).append(2);
sb.insert(1,'m');//在index=1处添加字符m
sop(sb.toString());
}
public static void Method_delete() {
StringBuffer sb = new StringBuffer("abcde");
sb.delete(0, 3);
sb.deleteCharAt(0);
//sb.delete(0, sb.length());//清空缓存区
sop(sb.toString());
}
public static void Method_update() {
StringBuffer sb = new StringBuffer("abcde");
sb.replace(1, 3, "oo");
//sb.setCharAt(2, 'o');
sop(sb.toString());
}
public static void Method_getChars() {
StringBuffer sb = new StringBuffer("abcde");
char[] ch = new char[4];
sb.getChars(1, 3, ch, 2);
for(int x=0; x<ch.length;x++) {
sop("ch["+x+"]="+ch[x]+";");
}
}
public static void sop(String str) {
System.out.println(str);
}
}
控制台
ambctrue2
e
aoode
edcba
ch[0]= ;
ch[1]= ;
ch[2]=b;
ch[3]=c;
注意:JDK1.5
版本后出现了StringBuilder,
StringBuffer是线程同步
StringBuilder是线程不同步,但是效率高
以后开发,建议使用StringBuilder
注意:升级三个因素 a,提高效率b,简化代码c,提高安全性
-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
分享到:
相关推荐
String,StringBuffer,StringBuilder区别。几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关 工具如拼接类的使用,对写出高质量代码是非常有帮助的
String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别 String、StringBuilder和StringBuffer的区别
String StringBuffer和StringBuilder 区别之源码解析 从源码角度简单对它们之间的区别进行了验证
黑马程序员java培训就业班笔记:StringBuffer、基本数据类型的封装)总结
String:字符串常量 StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段...
对于很多Java行业的菜鸟来说,弄清楚String;StringBuffer;StringBuilder三者之间的区别是很有必要的,很多面试面试官都会问到这个知识点。集合网络上很多牛人的各种经典分析的总结,花了两个小时概括总结得出了现在...
它们与String类类似,但是不同之处在于,StringBuffer和StringBuilder可以修改字符串内容,而String对象是不可变的; StringBuffer和StringBuilder类的用法基本相同,但StringBuilder类的效率更高,因为它不是线程...
String ,StringBuffer与StringBuilder的区别
我们先用一张表格来回顾一下Java中String,StringBuilder,StringBuffer关于值可变性、线程安全性、时间性能排序、常用场景等主要区别。见下表: 数据类型 值可变性 线程安全性 时间性能排名 常用场景 String...
介绍了String、StringBuffer、StringBuilder的使用方法,以及理论知识
stringbuilder用法 String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String...
简单的介绍了String、StringBuffer和StringBuilder的区别
String & StringBuffer全面总结,希望能使初学者彻底掌握String&StringBuffer。
【Java基础笔记】String类以及StringBuffer Builder.docx
主要介绍了Java 中String StringBuilder 与 StringBuffer详解及用法实例的相关资料,需要的朋友可以参考下
String及StringBuffer和StringBuilder的区别
JAVA中String与StringBuffer的区别 JAVA中String与StringBuffer的区别 自己的学习笔记总结
String、StringBuffer 和 StringBuilder 的区别 碎碎念 简单认识这三个对象 String StringBuffer StringBuilder 深入理解 String、StringBuilder、StringBuffer 从设计角度理解 String StringBuilder StringBuffer ...
string,stringbuffer,stringbuilder
Java中String,StringBuffer与StringBuilder的区别和用法。