------- android培训、java培训、期待与您交流! ----------
String
1、String类
(1)字符串是一个特许的对象。
(2)字符串一旦被初始化就不可以被改变。
(3)String s1 = "abc";//s1是一个类类型变量,"abc"是一个对象。
(4)String s2 = new String("abc");
思考:s1 和 s2 有什么区别?
s1在内存中有一个对象,s2在内存中有两个对象。
2、String类部分方法
2.1 获取:
(1)获取字符串中的包含的字符数,也就是字符串的长度。
int length():获取长度。
(2)根据位置获取位置上某个字符。
char charAt(int index)
(3)根据字符获取该字符在字符串中位置。
int indexOf(int ch):返回的是ch在字符串中第一次出现的位置。
int indexOf(int ch, int fromIndex) :从fromIndex指定位置开始,获取ch在字符串中出现的位置。
int indexOf(String str):返回的是str在字符串中第一次出现的位置。
int indexOf(String str,int fromIndex) :从fromIndex指定位置开始,获取str在字符串中出现的位置。
int lastIndexOf(int ch) :由字符串后面开始往前获取ch在字符串中首次出现位置。
2.2 判断:
(1)字符串中是否包含某一个子串。
boolean contains(str);
特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。故indexOf(str)也可以用于对指定判断是否包含。
(2)字符中是否有内容。
boolean isEmpty(): 原理就是判断长度是否为0。
(3)字符串是否是以指定内容开头。
boolean startsWith(str);
(4)字符串是否是以指定内容结尾。
boolean endsWith(str);
(5)判断字符串内容是否相同,复写了Object类中的equals方法。
boolean equals(str);
(6)判断内容是否相同,并忽略大小写。
boolean equalsIgnoreCase();
2.3 转换:
(1)将字符数组转成字符串。
构造函数:
String(char[]);
String(char[],offset,count):将字符数组中的一部分转成字符串,count代表转换个数。
静态方法:
static String copyValueOf(char[]);
static String copyValueOf(char[] data, int offset, int count);
static String valueOf(char[]);
(2)将字符串转成字符数组。
char[] toCharArray();
(3)将字节数组转成字符串。
String(byte[]);
String(byte[],offset,count):将字节数组中的一部分转成字符串。
(4)将字符串转成字节数组。
byte[] getBytes();
(5)将基本数据类型转成字符串。
static String valueOf(int);
static String valueOf(double);
2.4 替换:
String replace(oldchar,newchar);//如果替换的字符原串中没有,则返回原串。
2.5 切割:
String[] split(regex);
2.6 子串:
获取字符串中的一部分。
String substring(begin);//从指定位置(begin)开始到结尾。
String substring(begin,end);//获取的子串包含头(begin)不包含尾(end)。
2.7 大小写转换、去空格、比较:
(1)将字符串转成大写或则小写。
String toUpperCase();
String toLowerCase();
(2)将字符串两端的多个空格去除。
String trim();
(3)对两个字符串进行自然顺序的比较。
int compareTo(string);
3、String类方法练习
(1)自己写一个trim函数,将字符串的两端的空格删除(字符串中间的空格不会被删除)。
class MyTrim
{
public static void main(String[] args)
{
String s1 = " hello world ";
String s2 = mytrim(s1);
System.out.println(s1);
System.out.println(s2);
}
public static String mytrim(String s)
{
int start = 0;
int end = s.length()-1;
while(start<=end && s.charAt(start)==' ')//charAt()获取字符串所指位置上的字符。
{
start++;
}
while(start<=end && s.charAt(end)==' ')
{
end--;
}
return s.substring(start,end+1);//获取子串
}
}
(2)获取两个字符串中最大相同子串。
class GetMaxSubstring
{
public static void main(String[] args)
{
String s1 = "cakgjjhellobionl";
String s2 = "oiohellovwen";
String str=getMaxSubString(s1,s2);
System.out.println(str);
}
public static String getMaxSubString(String s1,String s2)
{
String max = "";
String min = "";
max = (s1.length()>s2.length())?s1:s2;//将长的字符串传给max;
min = (max==s1)?s2:s1;//将短的字符串传给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);
//System.out.println(temp);
if(max.contains(temp))//if(max.indexof(temp)!=-1)
return temp;
}
}
return "";
}
}
(3)获取一个字符串在另一个字符串中出现的次数。如:"gguunmiuurlwuufgyuu"。
class GetSubCount
{
public static void main(String[] args)
{
String s = "gguunmiuurlwuufgyuu";
int num = getSubCount("uu",s);
System.out.println(num);
}
public static int getSubCount(String key,String str)
{
int count = 0;
int index;
while((index=str.indexOf(key))!=-1)
{
System.out.println("str: "+str);
str = str.substring(index+key.length());//截取字串
count++;
}
return count;//返回次数
}
}
4、StringBuffer
StringBuffer的特点:
(1)StringBuffer是字符缓冲区,是一个容器。
(2)StringBuffer长度是可变化的。(数组的长度不可变化)
(3)StringBuffer可以字节操作多个数据类型。(数组只能操作一种数据类型)
(4)StringBuffer最终会通过toString方法转换成字符串。
5、StringBuffer特有方法
5.1 存储:
StringBuffer append():将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(index,数据):可以将数据插入到指定index位置。
5.2 删除:
StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(index):删除指定位置的字符。
5.3 获取:
char charAt(int index):获取缓冲区中指定位置index处的字符。
int indexOf(String str) :获取指定字符串str在缓冲区中出现的位置。
int lastIndexOf(String str) :由后往前寻找指定字符串str在缓冲区中出现的位置。
String substring(int start, int end):获取子串。
5.4 修改:
StringBuffer replace(start,end,string):将缓冲区内由start位置开始end位置结束的字串替换为string。
void setCharAt(int index, char ch):将指定位置index处字符替换为ch。
5.5 反转:
StringBuffer reverse();
知识点:JDK1.5 出现了一个StringBuilder,它和StringBuffer有什么区别呢?
(1)StringBuilder的执行速度比StringBuffer的快。
(2)StringBuilder是非同步的,线程非安全。StringBuffer是同步的,线程安全。
6、基本数据类型对象包装类
八种基本数据类型的对象包装类
(1)将基本数据类型封装成对象包装类的好处:可以在对象中定义更多的方法操作该数据。
(2)常用的操作:用于基本数据类型和字符串类型之间做转换。
(3)基本数据类型转换成字符串:
基本数据类型+"";
基本数据类型.toString(基本数据类型值);
如: Integer.toString(34);//将34整数变成"34";
(4)字符串转成基本数据类型:
xxx a = Xxx.parseXxx(String);
int a = Integer.parseInt("123");
Integer i = new Integer("123");
int num = i.intValue();
(5)十进制转成其他进制
toBinaryString();//转二进制
toHexString();//转十六进制
toOctalString();//转八进制
(6)其他进制转十进制
parseInt(string,radix);//radix表示进制数(2,8,16)
7、基本数据类型对象包装类的新特性
JDK1.5 以后,简化了定义方式。
Integer x = new Integer(4);//可以直接写成下面方式
Integer x = 4;//自动装箱
x = x + 5;//x+5:x 进行自动拆箱,变成成了int类型再和5进行加法运算。最后将和装箱赋值给x。
需要注意:在使用时,Integer x = null;前面代码会出现NullPointerException报错。