如今,问你一个问题:你的第一个程序的功能是什么?让咱们一块儿回忆一下,searching.......应该是——“Hello world!”吧,全部的语言在迈向世界的第一次问好。好了,主题——字符串。数组
1、初始化:ide
因为String对象特别经常使用,因此在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式以下:编码
String s = “abc”;spa
s = “Java语言”;对象
其实按照面向对象的标准语法,其格式应该为:索引
String s = new String(“abc”);内存
s = new String(“Java语言”);文档
只是按照面向对象的标准语法,在内存使用上存在比较大的浪费。例如String s = new String(“abc”);实际上建立了两个String对象,一个是”abc”对象,存储在常量空间中,一个是使用new关键字为对象s申请的空间。字符串
其它的构造方法的参数,能够参看String类的API文档。string
二、字符串的常见操做
1、charAt方法
该方法的做用是按照索引值(规定字符串中第一个字符的索引值是0,第二个字符的索引值是1,依次类推),得到字符串中的指定字符。例如:
String s = “abc”;
char c = s.chatAt(1);
则变量c的值是’b’。
2、compareTo方法
该方法的做用是比较两个字符串的大小,比较的原理是依次比较每一个字符的字符编码。首先比较两个字符串的第一个字符,若是第一个字符串的字符编码大于第二个的字符串的字符编码,则返回大于0的值,若是小于则返回小于0的值,若是相等则比较后续的字符,若是两个字符串中的字符编码彻底相同则返回0。
例如:
String s = “abc”;
String s1 = “abd”;
int value = s.compareTo(s1);
则value的值是小于0的值,即-1。
在String类中还存在一个相似的方法compareToIgnoreCase,这个方法是忽略字符的大小写进行比较,比较的规则和compareTo同样。例如:
String s = “aBc”;
String s1 = “ABC”;
int value = s. compareToIgnoreCase (s1);
则value的值是0,即两个字符串相等。
3、concat方法
该方法的做用是进行字符串的链接,将两个字符串链接之后造成一个新的字符串。例如:
String s = “abc”;
String s1 = “def”;
String s2 = s.concat(s1);
则链接之后生成的新字符串s2的值是”abcdef”,而字符串s和s1的值不发生改变。若是须要链接多个字符串,可使用以下方法:
String s = “abc”;
String s1 = “def”;
String s2 = “1234”;
String s3 = s.concat(s1).concat(s2);
则生成的新字符串s3的值为”abcdef1234”。
其实在实际使用时,语法上提供了一种更简单的形式,就是使用“+”进行字符串的链接。例如:
String s = “abc” + “1234”;
则字符串s的值是”abc1234”,这样书写更加简单直观。
并且使用“+”进行链接,不只能够链接字符串,也能够链接其余类型。可是要求进行链接时至少有一个参与链接的内容是字符串类型。并且“+”匹配的顺序是从左向右,若是两边链接的内容都是基本数字类型则按照加法运算,若是参与链接的内容有一个是字符串才按照字符串进行链接。
例如:
int a = 10;
String s = “123” + a + 5;
则链接之后字符串s的值是“123105”,计算的过程为首先链接字符串”123”和变量a的值,生成字符串”12310”,而后使用该字符串再和数字5进行链接生成最终的结果。
而以下代码:
int a = 10;
String s = a + 5 + “123”;
则链接之后字符串s的值是”15123”,计算的过程为首先计算a和数字5,因为都是数字型则进行加法运算或者数字值15,而后再使用数字值15和字符串”123”进行链接得到最终的结果。
而下面的链接代码是错误的:
int a = 12;
String s = a + 5 + ‘s’;
由于参与链接的没有一个字符串,则计算出来的结果是数字值,在赋值时没法将一个数字值赋值给字符串s。
4、endsWith方法
该方法的做用是判断字符串是否以某个字符串结尾,若是以对应的字符串结尾,则返回true。
例如:
String s = “student.doc”;
boolean b = s.endsWith(“doc”);
则变量b的值是true。
5、equals方法
该方法的做用是判断两个字符串对象的内容是否相同。若是相同则返回true,不然返回false。例如:
String s = “abc”;
String s1 = new String(“abc”);
boolean b = s.equals(s1);
而使用“==”比较的是两个对象在内存中存储的地址是否同样。例如上面的代码中,若是判断:
boolean b = (s == s1);
则变量b的值是false,由于s对象对应的地址是”abc”的地址,而s1使用new关键字申请新的内存,因此内存地址和s的”abc”的地址不同,因此得到的值是false。
在String类中存在一个相似的方法equalsIgnoreCase,该方法的做用是忽略大小写比较两个字符串的内容是否相同。例如:
String s = “abc”;
String s1 =”ABC”;
boolean b = s. equalsIgnoreCase (s1);
则变量b的值是true。
6、indexOf方法
该方法的做用是查找特定字符或字符串在当前字符串中的起始位置,若是不存在则返回-1。例如:
String s = “abcded”;
int index = s.indexOf(‘d’);
int index1 = s.indexOf(‘h’);
则返回字符d在字符串s中第一次出现的位置,数值为3。因为字符h在字符串s中不存在,则index1的值是-1。
固然,也能够从特定位置之后查找对应的字符,例如:
int index = s.indexOf(‘d’,4);
则查找字符串s中从索引值4(包括4)之后的字符中第一个出现的字符d,则index的值是5。
因为indexOf是重载的,也能够查找特定字符串在当前字符串中出现的起始位置,使用方式和查找字符的方式同样。
另一个相似的方法是lastIndexOf方法,其做用是从字符串的末尾开始向前查找第一次出现的规定的字符或字符串,例如:
String s = “abcded”;
int index = s. lastIndexOf(‘d’);
则index的值是5。
7、length方法
该方法的做用是返回字符串的长度,也就是返回字符串中字符的个数。中文字符也是一个字符。例如:
String s = “abc”;
String s1 = “Java语言”;
int len = s.length();
int len1 = s1.length();
则变量len的值是3,变量len1的值是6。
8、replace方法
该方法的做用是替换字符串中全部指定的字符,而后生成一个新的字符串。通过该方法调用之后,原来的字符串不发生改变。例如:
String s = “abcat”;
String s1 = s.replace(‘a’,’1’);
该代码的做用是将字符串s中全部的字符a替换成字符1,生成的新字符串s1的值是”1bc1t”,而字符串s的内容不发生改变。
若是须要将字符串中某个指定的字符串替换为其它字符串,则可使用replaceAll方法,例如:
String s = “abatbac”;
String s1 = s.replaceAll(“ba”,”12”);
该代码的做用是将字符串s中全部的字符串”ab”替换为”12”,生成新的字符串”a12t12c”,而字符串s的内容也不发生改变。
若是只须要替换第一个出现的指定字符串时,可使用replaceFirst方法,例如:
String s = “abatbac”;
String s1 = s. replaceFirst (“ba”,”12”);
该代码的做用是只将字符串s中第一次出现的字符串”ab”替换为字符串”12”,则字符串s1的值是”a12tbac”,字符串s的内容也不发生改变。
9、split方法
该方法的做用是以特定的字符串做为间隔,拆分当前字符串的内容,通常拆分之后会得到一个字符串数组。例如:
String s = “ab,12,df”;
String s1[] = s.split(“,”);
该代码的做用是以字符串”,”做为间隔,拆分字符串s,从而获得拆分之后的字符串数字s1,其内容为:{“ab”,”12”,”df”}。
该方法是解析字符串的基础方法。
若是字符串中在内部存在和间隔字符串相同的内容时将拆除空字符串,尾部的空字符串会被忽略掉。例如:
String s = “abbcbtbb”;
String s1[] = s.split(“b”);
则拆分出的结果字符串数组s1的内容为:{“a”,””,”c”,”t”}。拆分出的中间的空字符串的数量等于中间间隔字符串的数量减一个。例如:
String s = “abbbcbtbbb”;
String s1[] = s.split(“b”);
则拆分出的结果是:{“a”,””,””,”c”,”t”}。最后的空字符串不论有多少个,都会被忽略。
若是须要限定拆分之后的字符串数量,则可使用另一个split方法,例如:
String s = “abcbtb1”;
String s1[] = s.split(“b”,2);
该代码的做用是将字符串s最多拆分红包含2个字符串数组。则结果为:{“a”,”cbtb1”}。
若是第二个参数为负数,则拆分出尽量多的字符串,包括尾部的空字符串也将被保留。
10、startsWith方法
该方法的做用和endsWith方法相似,只是该方法是判断字符串是否以某个字符串做为开始。例如:
String s = “TestGame”;
boolean b = s.startsWith(“Test”);
则变量b的值是true。
11、substring方法
该方法的做用是取字符串中的“子串”,所谓“子串”即字符串中的一部分。例如“23”是字符串“123”的子串。
字符串“123”的子串一共有6个:”1”、”2”、”3”、”12”、”23”、”123”。而”32”不是字符串”123”的子串。
例如:
String s = “Test”;
String s1 = s.substring(2);
则该代码的做用是取字符串s中索引值为2(包括)之后的全部字符做为子串,则字符串s1的值是”st”。
若是数字的值和字符串的长度相同,则返回空字符串。例如:
String s = “Test”;
String s1 = s.substring(4);
则字符串s1的值是””。
若是须要取字符串内部的一部分,则可使用带2个参数的substring方法,例如:
String s = “TestString”;
String s1 = s.substring(2,5);
则该代码的做用是取字符串s中从索引值2(包括)开始,到索引值5(不包括)的部分做为子串,则字符串s1的值是”stS”。
下面是一个简单的应用代码,该代码的做用是输出任意一个字符串的全部子串。代码以下:
String s = “子串示例”;
int len = s.length(); //得到字符串长度
for(int begin = 0;begin < len – 1;begin++){ //起始索引值
for(int end = begin + 1;end <= len;end++){ //结束索引值
System.out.println(s.substring(begin,end));
}
}
在该代码中,循环变量begin表明须要得到的子串的起始索引值,其变化的区间从第一个字符的索引值0到倒数第二个字符串的索引值len -2,而end表明须要得到的子串的结束索引值,其变化的区间从起始索引值的后续一个到字符串长度。经过循环的嵌套,能够遍历字符串中的全部子串。
12、trim方法
该方法的做用是去掉字符串开始和结尾的全部空格,而后造成一个新的字符串。该方法不去掉字符串中间的空格。例如:
String s = “ abc abc 123 “;
String s1 = s.trim();
则字符串s1的值为:” abc abc 123”。字符串s的值不变。
关于String类的使用就介绍这么多,其它的方法以及这里到的方法的详细声明能够参看对应的API文档。