String:
1:public final class String extends Object
String s1 = "abc"; //s1是一个类类型变量, "abc"是一个对象。 //字符串最大特点:一旦被初始化就不可以被改变。
String s2 = new String("abc"); //s2是两个对象,s2和“abc”这是s1和s2的区别所在。
String s3 = "abc";
System.out.println(s1==s2); //两个对象 false
System.out.println(s1.equals(s2)); //String类复写了Object类中equals方法,该方法用于判断字符串地址是否相同。 true
System.out.println(s1==s3)); true
2:String类是对字符串事物的描述。该类定义了专门用于操作字符串的方法。常见的操作方法如下:
获取:
字符串中的包含的字符数,也就是字符串的长度。》》》》》》》》》》》》》int length():获取长度。
根据位置获取位置上某个字符。》》》》》》》》》》》》》》》》》》》》》char charAt(int index):
根据字符获取该字符在字符串中位置。》》》》》》》》》》》》》》》》》》
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) :
判断:
字符串中是否包含某一个子串。》》》》》》》》》》》》》》》》》》》》boolean contains(str):
特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。
if(str.indexOf("aa")!=-1)而且该方法即可以判断,也可以获取出现的位置。
字符中是否有内容。》》》》》》》》》》》》》》》》》》》》》》》》》boolean isEmpty(): 原理就是判断长度是否为0.
字符串是否是以指定内容开头。》》》》》》》》》》》》》》》》》》》》》》》》boolean startsWith(str);
字符串是否是以指定内容结尾。》》》》》》》》》》》》》》》》》》》》》》》》boolean endsWith(str);
判断字符串内容是否相同。复写了Object类中的equals方法。》》》》》》》》》》》boolean equals(str);
判断内容是否相同,并忽略大小写。》》》》》》》》》》》》》》》》》》》》》》》boolean equalsIgnoreCase();
转换:
将字符数组转成字符串。》》》》》》》》》》》》》》》》》》》》》》》》》
构造函数:String(char[])
String(char[],offset,count):将字符数组中的一部分转成字符串。
静态方法:static String copyValueOf(char[]);
static String copyValueOf(char[] data, int offset, int count)
static String valueOf(char[]):
将字符串转成字符数组。》》》》》》》》》》》》》》》》》》》》》》》》》》》char[] toCharArray():
将字节数组转成字符串。》》》》》》》》》》》》》》》》》》》》》》》》》》》String(byte[])
将字节数组中的一部分转成字符串。》》》》》》》》》》》》》》》》》》》》》》String(byte[],offset,count):
将字符串转成字节数组。》》》》》》》》》》》》》》》》》》》》》》》》》》》byte[] getBytes():
将基本数据类型转成字符串。》》》》》》》》》》》》》》》》》》》》》》》》》
static String valueOf(int)
static String valueOf(double)
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
替换:
String replace(oldchar,newchar);
切割:
String[] split(regex);
子串。获取字符串中的一部分。
String substring(begin); String substring(begin,end);
转换,去除空格,比较。
将字符串转成大写或则小写。》》》》》》》》》》》》》 String toUpperCase(); String toLowerCase();
将字符串两端的多个空格去除:》》》》》》》》》》》》 String trim();
对两个字符串进行自然顺序的比较。》》》》》》》》》》int compareTo(string);
去空格:
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); //这个方法是提取包含头不包含尾的,所以end要加1
}
字符串反转:
public static String reverseString(String s,int start,int end) {
//字符串变数组。
char[] chs = s.toCharArray();
//反转数组。
reverse(chs,start,end);
//将数组变成字符串。
return new String(chs);
}
public static String reverseString(String s) {
return reverseString(s,0,s.length());
}
private static void reverse(char[] arr,int x,int y) {
for(int start=x,end=y-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;
}
获取一个字符串在另一个字符串中出现的次数。
public static int getSubCount_1(String str,String key) {
int count = 0; int index = 0;
while((index=str.indexOf(key))!=-1) { //只要没有找到那个key就循环去找
sop("str="+str);
str = str.substring(index+key.length()); //找到了key第一次出现的位置,再加上KEY的长度就可以从第一次出现的位置后去找key的位置,找到了就++
count++;
}
return count;
}
或者下面
public static int getSubCount_2(String str,String key) {
int count = 0,index = 0;
while((index= str.indexOf(key,index))!=-1) {
sop("index="+index);
index = index + key.length();
count++;
}
return count;
}
获取两个字符串中最大相同子串: 将短的那个子串按照长度递减的方式获取到。 将每获取到的子串去长串中判断是否包含,如果包含,已经找到!。
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+"...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);
sop(temp);
if(max.contains(temp)) //if(s1.indexOf(temp)!=-1)
return temp;
}
}
return "";
}
StringBuffer:是字符串缓冲区,是一个容器。
特点:长度是可变化的;可以字节操作多个数据类型;最终会通过toString方法变成字符串。
功能:
存储:
StringBuffer append():将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(index,数据):可以将数据插入到指定index位置。
删除:
StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(index):删除指定位置的字符。
获取。
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end)
修改:
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ;
反转: StringBuffer reverse();
将缓冲区中指定数据存储到指定字符数组中: void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
JDK1.5 版本之后出现了StringBuilder:StringBuffer是线程同步。 StringBuilder是线程不同步。建议使用StringBuilder
基本数据类型对象包装类
基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换。
1:基本数据类型转成字符串。
基本数据类型.toString(基本数据类型值); Integer.toString(34);
2:字符串转成基本数据类型。
xxx a = Xxx.parseXxx(String); double b = Double.parseDouble("12.23"); //必须传入数字格式的字符串。
Integer i = new Integer("123"); int num = i.intValue();
3:十进制转成其他进制: toBinaryString(); toHexString(); toOctalString();
4:其他进制转成十进制: parseInt(string,radix);
对象包装类新特性:
Integer x = new Integer(4);
Integer x = 4;//自动装箱。等同于new Integer(4)
x = x /*相当于 x.intValue() */ + 2; //x+2:x 进行自动拆箱。变成成了int类型。和2进行加法运算。再将和进行装箱赋给x。但是新特性有
一个弱点,就是Integer x = null;这样是不行的,因为它的指向为空的话x.intValue()就会抛空指针异常,所以在进行装箱和拆箱的时候要先判
断是否为null,