一、String类
        String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。String类对象创建后不能修改,由0或多个字符组成,包含在一对双引号之间。Java中String是immutable(不可变)的。
二、创建字符串

   String类即字符串类型,并不是Java的基本数据类型,但可以像基本数据类型一样使用,用双引号括起来进行声明。在Java中用String类的构造方法来创建字符串变量。几种常用的构造方法如下:

字符串声明:String stringName;
字符串创建:stringName = new String(字符串常量);

String str1;
str1  = new String("abcdefG");

或stringName = 字符串常量;

String str2 = "ABCDEFG";

三、String类构造方法

1、public String()

无参构造方法,用来创建空字符串的String对象。

String str = new String();

2、public String(String value)

用已知的字符串value创建一个String对象。

String str1 = new String("abcdefg");
String str2 = new String(str1);

3、public String(char[] value)

用字符数组value创建一个String对象。

char[] value = {'a','b','c','d','e','f','g'};
String str = new String(value);//相当于String str = new String("abcdefg");

4、public String(char chars[], int startIndex, int numChars)

用字符数组chars的startIndex开始的numChars个字符创建一个String对象。
 

char[] value = {'a','b','c','d','e','f','g'};
String str = new String(value,1,2);//相当于String str = new String("bc");

5、public String(byte[] values)

用比特数组values创建一个String对象。

byte[] values = {65,66,67,97};
String str = new String(values);//相当于String str = new String("ABCa");

6、String(char a[], int offset, int length)

提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度。

char[] value = {'a','b','c','d','e','f','g'};
  String str = new String(value,0,2);//相当于String str = new String("ab");

char[] value = {'a','b','c','d','e','f','g'};
String str = new String(value,0,2);//相当于String str = new String("ab");

 

四、String类常用方法

1、求字符串长度

public int length()//返回该字符串的长度

语法如下:

str.length();

String str = "abcdefg";
int strLength = str.length();//strLength = 7
System.out.println(str.length());//输出结果为:7

2、求字符串某一位置字符

public char charAt(int index)//返回字符串中指定位置的字符;注意字符串中第一个字符索引是0,最后一个是length()-1。

语法如下:

str.charAt(int index)

str:任意字符串。

index:整型值,用于指定要返回字符的下标。

String str = "abcdefg";
char value = str.charAt(3);//value = d
System.out.println(str.charAt(0));//输出结果为:a

3、提取子串
用String类的substring方法可以提取字符串中的子串,该方法有两种常用参数:
1)public String substring(int beginIndex)//该方法从beginIndex位置起,从当前字符串中取出剩余的字符作为一个新的字符串返回。
2)public String substring(int beginIndex, int endIndex)//该方法从beginIndex位置起,从当前字符串中取出到endIndex-1位置的字符作为一个新的字符串返回。

String str = new String("abcdefg");
String str1 = str.substring(4);//str1 = efg
String str2 = str.substring(0, 3);//str2 = "abc"
String str3 = str.substring(2, 4);//str3 = "cd"
//使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符

4、字符串比较
1)public int compareTo(String anotherString)//该方法是对字符串内容按字典顺序进行大小比较,通过返回的整数值指明当前字符串与参数字符串的大小关系。若当前对象比参数大则返回正整数,反之返回负整数,相等返回0。
2)public int compareToIgnore(String anotherString)//与compareTo方法相似,但忽略大小写。
3)public boolean equals(Object anotherObject)//比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。
4)public boolean equalsIgnoreCase(String anotherString)//与equals方法相似,但忽略大小写。

String str1 = new String("abc");
String str2 = new String("ABC");
int a = str1.compareTo(str2);//a = 32  ASCII字符代码表中a对应97,A对应65,因此(97 - 65 = 32)
int b = str1.compareToIgnoreCase(str2);//b = 0  因为该方法忽略大小写
boolean c = str1.equals(str2);//c = false 
boolean d = str1.equalsIgnoreCase(str2);// d = true  因为该方法忽略大小写

5、字符串连接
public String concat(String str)//将参数中的字符串str连接到当前字符串的后面,效果等价于"+"。
 

String str1 = "我".concat("爱").concat("学习").concat(",学习使我快乐!");//"我爱学习,学习使我快乐!",
//效果等同于
String str2  = "我"+"爱"+"学习"+",学习使我快乐!";

boolean a = str1.equals(str2);//a = true

6、字符串中单个字符查找
1)public int indexOf(int ch/String str)//用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。
2)public int indexOf(int ch/String str, int fromIndex)//该方法与第一种类似,区别在于该方法从fromIndex位置向后查找,如果不存在这样的  值,则返回 -1。
3)public int lastIndexOf(int ch/String str)//返回指定字符在此字符串中最后一次出现处的索引,如果不存在这样的  值,则返回 -1。
4)public int lastIndexOf(int ch/String str, int fromIndex)//返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。如果不存在这样的  值,则返回 -1。

String str= "What do you do for fun?";
int a = str.indexOf('W');// a = 0	字符'W'位于字符串str的索引0处
int b = str.indexOf("do");// b = 5	第一个"do"字符串位置位于索引第5处
int c= str.indexOf("for", 5);// c = 15	从索引5处开始向后搜索,返回"for"在str字符串中第一次出现的大于或等于 fromIndex 的字符的索引;如果未出现该字符,则返回 -1。
		
int d = str.lastIndexOf("do");// d = 12  最后一个"do" 出现在str字符串索引12处
		
int e = str.lastIndexOf("do",10); // e = 5	从指定的索引10处开始反向搜索,因此只能搜索到第一个"do"的索引处,因此e = 5
int f = str.lastIndexOf("do",20); // f = 12	从指定的索引20处开始反向搜索,因此只能搜索到第二个"do"的索引处,因此f = 12

7、字符串中字符的大小写转换
1)public String toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串
2)public String toUpperCase()//返回将当前字符串中所有字符转换成大写后的新串

String str = new String("Hello Java");
String str1 = str.toUpperCase();//str1 = "HELLO JAVA"
String str2 = str.toLowerCase();//str2 = "hello java"

8、字符串中字符的替换
1)public String replace(char oldChar, char newChar)//用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串。
2)public String replaceFirst(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串返回。
3)public String replaceAll(String regex, String replacement)//该方法用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串返回。

注意:

replace()方法返回的结果是一个新的字符串。如果字符串oldChar没有出现在该对象表达式中的字符串序列中,则将原字符串返回。
 

String str = new String("Hello Hello");
String str1 = str.replace('l', 'L');// str1 = "HeLLo HeLLo"  将str字符串中所有"l"字符替换成了"L"
String str2 = str.replace("Java", "Learn");// str2 = "Hello Hello";  因为"Java"字符串没有出现在 "Hello Hello"中,所以将str原字符串返回
		
String str3 = str.replaceFirst("Hello", "Hi");//str2 = "Hi Hello"  将第一个和"Hello"匹配的字符串替换成"Hi"
String str4 = str.replaceAll("Hello", "Yeah");// str3 ="Yeah Yeah"   将所有"Hello"字符串替换成"Yeah"

9、其他类方法
1)String trim()//截去字符串两端的空格,但对于中间的空格不处理。

String str1 = "  day 01  "; 
String str2 = str1.trim();//str2 = "day 01"
		
int a = str1.length();// a = 10  去掉空格前字符串str1的长度
int b = str2.length();// b = 6  共去除掉首尾4个空格字符后的字符串str2的长度

 

2)boolean statWith(String prefix)//该方法用于判断当前字符串对象的前缀是否是参数指定的字符串。
  

 boolean endWith(String suffix)//该方法用于判断当前字符串是否是以给定的子字符串作为后缀结束。

public boolean startsWith(String  prefix,int toffset)//测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

String str = "www.OSChina.net";
		
boolean a =  str.startsWith("www");//a = true
boolean b = str.endsWith(".net");//b = true
boolean c = str.startsWith("OSChina", 4);//c = true  从字符串str 索引第4处开始,确实是以OSChina作为前缀

 

3)regionMatches(boolean ignoreCase, int firstStart, String other, int otherStart, int length)//测试两个字符串区域是否相等。
从当前字符串的firstStart位置开始比较,取长度为length的一个子字符串,other字符串从otherStart位置开始,指定另外一个长度为length的字符串,两字符串比较,当ignoreCase为true时字符串不区分大小写。
 

String str1 = "www.OSChina.net";
String str2 = "www.ioschina.net";
		
boolean a = str1.regionMatches(true, 4, str2, 5, 7);//a = true  字符串str1和字符串str2在字符不区分大小写的情况下,比对"OSchina"和"oschina"两个字符串区域是否相等。
boolean b = str1.regionMatches(false, 4, str2, 5, 7);//b = false  区分大小写的情况下,不再相等

 

5)String[] split(String str)//将str作为分隔符进行字符串分解,分解后的结果存放在字符串数组种,以字符串数组的形式返回。
  split(String str,int limit)//该方法根据给定的分割符对字符串进行拆分,并限定拆分的份数。
(如果 int limt 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 limt 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。)
 

String str = "aaazbbbzCCC";
		
String[] str1 = str.split("z");//str1[0]) = "aaa" ; str1[1]) = "bbb" ; str1[2]) = "CCC"
String[] str2 = str.split("z", 2);//str1[0]) = "aaa" ; str1[1]) = "bbbzCCC"   由于限定了拆分个数(2),所以返回的字符串数组只有2个元素

 

五、字符串与基本类型的转换
1、字符串转换为基本类型
java.lang包中有Byte、Short、Integer、Float、Double类的调用方法:
1)public static byte parseByte(String s)
2)public static short parseShort(String s)
3)public static int parseInt(String s)
4)public static long parseLong(String s)
5)public static float parseFloat(String s)
6)public static double parseDouble(String s)
 

int a = Integer.parseInt("314");//int a = 314
float b = Float.parseFloat("3.1415");//float b = 3.1415
double c= Double.parseDouble("3.1415926");//double c = 3.1415926

 

2、基本类型转换为字符串类型
String类中提供了String valueOf()放法,用作基本类型转换为字符串类型。
1)static String valueOf(char data[])
2)static String valueOf(char data[], int offset, int count)
3)static String valueOf(boolean b)
4)static String valueOf(char c)
5)static String valueOf(int i)
6)static String valueOf(long l)
7)static String valueOf(float f)
8)static String valueOf(double d)

String str = String.valueOf(3.14);
System.out.println(str);

 

3、进制转换
使用Long类中的方法得到整数之间的各种进制转换的方法:
1)public static String toBinaryString(long i)//以二进制(基数 2)无符号整数形式返回 long 参数的字符串表示形式。
2)public static String toOctalString(long i) //以八进制(基数 8)无符号整数形式返回 long 参数的字符串表示形式。
3)public static String toHexString(long i) //以十六进制(基数 16)无符号整数形式返回 long 参数的字符串表示形式。
4)public static String toString(long i)//以十进制(基数 10)无符号整数形式返回 long 参数的字符串表示形式。
5)public static String toString(long i,int radix)//radix(基数)作为任意进制
 

Long i = 10L;
String str = Long.toBinaryString(i);// str = "1010";  十进制数10转换成二进制数为:1010