第一部分:String,StringBuffer以及StringBuilder
常见的操作有那些?
1. 字符串是否是以指定内容开头/结尾
booleanstartsWith(String str);boolean endsWith(String str);
2. 判断内容是否相同,并忽略大小写。
booleanequalsIgnoreCase();
3.转换
3-1 将字符数组转成字符串/或字符串转成字节数组。
构造函数:String(char[])
String(char[],offset,count);讲字符数组部分转成字符串
静态方法:static String copyValueOf(char[])
static StringcopyValueOf(char[],offset,count)
static StringvalueOf(char[])
-----------
char toCharArray();
3-2 将字节数组转成字符串/或字符串转成字节数组。
构造函数:String(byte[])
String(byte[],offset,count);讲字符数组部分转成字符串
-----------
byte[] getBytes();
【特殊】:字符串和字节数组在转换过程中,是可以指定编码表的。
3-3 将基本数据类型转成字符串:
static StringvalueOf(int/double/char[])
4.替换
4-1 String replace(oldchar,newchar);
如果要替换的字符不存在,则返回原串
Stringreplace(oldstr,newstr);
5.切割
5-1 String[] split(String regex);根据给定的正则表达式切割字符串
Ex. String[] s ="lily,mike,anna"
String[] arr =s.split(",");
6.子串
6-1 获取字符串中的一部分。
String substring(intbegin);从指定位置到结尾
String substring(intbegin,int end);指定区间[begin,end)
如果角标不存在,会抛出字符串角标越界异常
7.转换,去除空格,比较,连接
7-1 将字符串转成大写或者小写
String toUpperCase();String to LowerCase();
7-2 将字符串两端的多个空格去除
String trim();
7-3 对两个字符串进行自然顺序比较
int compareTo(Stringstr);
7-4 将指定字符串连接到此字符串的结尾
String concat(Stringstr);
* /
class StringDemo
{
public static voidmain(String[] args)
{
String str1 ="abcabcabcdef";
String str2 ="fgfgfgc";
//System.out.println(str);
//1.System.out.println(trim(str));
//2.System.out.println(reverseDemo(str));
//2.System.out.println(reverseDemo(str,6,8));
//3.System.out.println(timesDemo("a",str));
System.out.println(getMaxSubDemo(str1,str2));
}
//练习一:去除字符串首尾处的多处空格
public static Stringtrim(String str){
int pos1=0;
intpos2=str.length()-1;
while(pos1<=pos2 && str.charAt(pos1) == ' '){
pos1++;
}
while(pos1<=pos2 && str.charAt(pos2) == ' '){
pos2--;
}
returnstr.substring(pos1,pos2+1);
}
//将一个字符串进行反转: 字符串转成数组,操作完转回去
public static StringreverseDemo(String str){
char[] temp =new char[str.length()];
for (int index =0; index <=str.length()-1 ; index++ )
{
temp[index] = str.charAt(str.length()-index-1);
}
return new String(temp);
}
//获取一个字符串在另一个字符串中出现的次数
//1.设置一个计数器 2.获取第一次出现的位置 3.从该位置往后找
public static int timesDemo(Stringstr, String key){
int cont=0;
int index=0;
while( (index=str.indexOf(key))!= -1)
key=index+key.length()+index
count++;
}
return count;
}
//获取两个字符串的最大长度子串: 子串长度是控制的关键。
public static StringgetMaxSubDemo(String astr, String bstr){
String lg = newString();
String st = new String();
if(astr.length()>bstr.length()){
lg =astr;st = bstr;
}
else{
lg =bstr;st = astr;
}
for (int i =st.length()-1;i>=0 ;i-- )//控制子串长度
{
for (intj =0; j<st.length()-i; j++ )//控制产生相同长度不同子串
{
String temp = st.substring(j,j+i+1);//+1?
if( lg.contains(temp))
return temp;
System.out.println(temp);
}
}
return null;
}
}
--------------------------------------------------------------------------------------------------
/ *
StringBuffer
是字符串缓冲区,是一个容器(与数组不同)
1.而且长度是变化的。
2.可以直接操作多种数据类型。
3.最终会通过toString方法变成字符串。
【数据基本操作:C create U update R read D delete】
1.存储:
StringBuffer append():将指定的数据作为参数添加到已有数据的结尾处。
StringBuffer insert(intindex,数据):将指定数据插入到指定位置。
2.删除:
StringBuffer delete(intstart,int end):删除缓冲区中数据。[start,end)
StringBufferdeleteCharAt(int index):删除指定位置的字符。
3.获取:
char charAt(in index);
int indexOf(String str);
int lastIndexOf(String str);
int length();
String substring(intstart,int end);
4.修改:
StringBuffer replace(intstart,int end,String str);特定位置替换成指定字符串
void setCharAt(intindex,char ch);替换某一位字符
5.反转:String reverse();
6.转存:
将缓冲区中的指定区间数据,存储到指定数组的指定位置(考虑越界问题):
void getChars(int srcBegin,int srcEnd, char[] dst,int dstBegin);
* /
class StringBufDemo
{
public static voidmain(String[] args)
{
StringBuffer sb= new StringBuffer();
StringBuffer sb1= sb.append(34);
//两个变量指向的是同一对象,因此对对象的操作和数据是共享的。
sb.append(12).append(true).append("abc");//函数调用链
sb.insert(1,"qq");
sb.delete(1,3);
sb.delete(0,sb.length());//清空
}
}
/ *
--------------------------------------------------------------------------------------------------
StringBuilder
(1.5以后版本出现),用于提高效率
一般版本升级的三个因素:效率,简化书写,提高安全性。
StringBuffer是线程同步的,StringBuilder是线程非同步的。
在单线程中,StringBuffer反复判断同步锁,效率变低,多用StringBuilder;
在多线程中,StringBuilder会出现安全问题,因此多用StringBuffer。
开发建议使用StringBuilder,操作方法相同。
第二部分:基本数据类型对象包装类
基本数据类型对象包装类:
基本数据类型--> 引用数据类型
byte --> Byte
short --> Short
int --> Integer
long --> Long
boolean --> Boolean
float --> Float
double --> Double
整数类型的最大值Integer.MAX_VALUE; 运算时利用其做判断
最常见作用:用于基本数据类型和字符串类型之间的转换。
1.基本数据类型转成字符串。
基本数据类型 + "";
基本数据类型.toString(基本数据类型值);
Ex. Integer.toString(34);//34->"34"
2.字符串转成基本数据类型。
2-1静态调用方式:
基本数据类型parseInt/Long/Boolean/Double(String str);
Xxx.parseXxx(str); 形如Integer.parseInt(str), Long.parseLong(str);
char本身是字符类型,没有此函数。
2-2对象调用方式:Integer i = new Integer("123");
int num = i.intValue();
3.进制转换
十进制转换成其他进制:
toBinaryString(十进制数值);
toHexString(十进制数值);
toOctalString(十进制数值);
其他进制转换成十进制:
Integer.parseInt("进制数值",进制);
--------------------------------------------------------------------------------------------------
JDK1.5版本以后出现的新特性:
1.
Integer x = 4;//new Integer(4)自动装箱
x = x + 2; //x+2:x进行了自动拆箱,变成了int类型进行加法运算,之后和自动装箱。
拆箱原理:x.intValue()
但是x=null时会抛出异常,因此进行拆箱时要进行判断。
2.
Integer a = 127;
Integer b = 127;
sop("a==b :"+(a==b));结果为true。
原因:
因为a和b指向了同一个Integer对象,当数值在byte范围内[-128——127],如果该数值已经存在
新特性下不会再开辟新的空间。
* /