一、API
1、API:英文 Application Program Iterface 的缩写,即应用编程接口
由官方或第三方提供的能实现特点功能的程序封装包,包含各功能类,接口,以及实现方法等;很多基础功能不需要再重写,直接调用即可;但因为Java的API十分丰富,常用的基础API就有很多,也需要花时间熟悉这些API的功能和使用方法;
2、常用API
String类, StringBuffer, StringBuilder ,集合(list set map) ,包装类,日历日期,IO流 ,异常 ,线程等;
二、String类
2.1String类
1、String类:Java 程序中的所有字符串字面值(如 "abc" ) 都作为此类的实例实现。即之前用到的所有的字符串引用类型数据;
即:String t = "HelloJava"; 其中"HelloJava"即为一个对象;
java.lang.String;lang包为系统默认的导包,直接调用不用导包;
3、String 类代表字符串。
字符串是常量,它们的值在创建之后不能更改。字符串缓冲区才支持可变的字符串。因为 String 对象是不可变的,所以可以共享;
1 String s1 = "HelloWorld";
2 String s2 = "HelloWorld";
3 String s3 = "Hello" + "World";
4 String s4 = "Hello" ;
5 String s5 = "World";
6 String s6 = s4 + s5; //生成新的对象,创建新地址
7 System.out.println(s1 == s2); //直接量 true
8 System.out.println(s1 == s3); //直接量 true
9 System.out.println(s1 == s6); //间接量 false
10
11 String s7 = new String("HelloWorld");
12 System.out.println(s1 == s7); //间接量 false
思考题:
String s7 = new String("HelloWorld"); 这句话创建了几个对象?
两个;new一个,"HelloWorld"本身就是个对象。
备注:
如果字符串创建的对象的时候是直接量赋值,那么会将该对象放到常量池 中去,如果下次再有相同的直接量赋值,此时会先从常量池遍历是否有该常量 存在,有则直接将该引用指向目标地址值,没有则会重新创建新的地址值,并 将其放入常量池;(同之前的常量以及数值型基本数据一样理解)。
2.2 String类中常见的一些方法(BJ)
int
练习:
检查一句话是否为回文?
回文:上海自来水来自海上
参考代码:StringDemo.java
concat(String str);
将指定字符串拼接到字符串末尾;
3.contains(String str);
查看是否有指定的字符序列,有返回true,否则返回false
4.startsWith(String str,int i);
判断指定字符串是否在字符串的起始/具体位置/结束;返回布尔值;
5.endsWith(String str);
判断指定字符串是否在字符串的结束;返回布尔值;
6.subString(int sta,int end);
返回字符串指定范围内(前包括,后不包括)的字符串;
7.toCharArray();
将指定字符串转为字符数组
8.toLowerCase();
将所有的字母全部转为小写
9.toUpperCase();
将所有的字母全部转为大写
10.trim();
去除字符串两边空白(中间的不能去除)
11.valueOf(obj);
将数组\对象\基本数据类型转为字符串类型
12.getBytes();
使用平台默认的编码字符集获取字符串的字节序列,
将结果存入到字节数组中去
平台默认的编码字符集:
Windows GBK:中文占2个字节,英文占1个字节
Linux/IOS UTF-8:中文占3个字节,英文占1个字节
UNICODE字符集:中英文各占2个字节,最后单独加2个字节进行相应的排序
13.indexOf(String str, int i);
返回指定字符str从第i个起在原字符串中第一次出现的位置
14.lastIndexOf(String str);
返回指定字符在原字符串中最后一次出现的位置
15.length();
返回字符串的长度
备注:区别length属性和length()方法
获取数组的长度用length属性,获取字符串长度用length()方法
16.replace();
用指定字符串替换原字符串中的部分内容(常用来替换敏感词汇) ,支持正则表达式(见下一章);
17.split();
根据指定的条件进行分割,结果返回为字符串数组,支持正则表达式(见下一章);
综合测试代码:StringDemo.java
内容较多,写得较乱,仅供参考,建议自测;
1 package API;
2
3 import java.util.Arrays;
4
5 import javax.swing.table.TableStringConverter;
6
7 import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;
8
9 //import org.junit.Test;
10
11 /**
12 * @项目名称:APIDay01
13 * @模块功能:测试String类的各个函数功能
14 * @模块版本:
15 * @JDKVersions:JDK 8.0
16 * @author: Kanekiyi
17 */
18 public class StringDemo {
19 //@Test
20 public static void test1() {
21 /**判断句子是否为回文**/
22 String string = "上海自来水来自海上";
23 int times=0;
24 boolean flag = true ;
25 for (int i = 0; i<string.length()/2;i++) {
26 if (string.charAt(i)!=string.charAt( string.length()-i-1) ) {
27 System.out.println(string+",这句话不是回文");
28 flag = false ;
29 break;
30 }
31 if (true) {
32 System.out.println(string+",这句话是回文");
33 break;
34 }
35 }
36
37 //找到字符串中的某个位置的字符
38 char c = string.charAt(5);
39 System.out.println("charAT()函数测试"+c);
40 }
41
42 public static void test2() {
43 String string = "java很吊";
44
45 /**字符串的拼接*/
46 String string2 = string.concat(",PHP最好");
47 System.out.println("string2:"+string2);
48
49 /**判断字符串是否在字符串的起始/具体位置/结束,在返回true
50 boolean b1 = string.startsWith("java");
51 boolean b2 = string.startsWith("吊",5);
52 boolean b3 = string2.endsWith("吊");
53 System.out.println();
54 System.out.println("starts/endsWith测试");
55 System.out.println(b1);
56 System.out.println(b2);
57 System.out.println(b3);
58
59 /**截取字符串的某一段作为新的字符串*/
60 String string3 = string2.substring(7);
61 System.out.println("string3:"+string3);
62 //前包括,后不包括
63 String string4 = string2.substring(7,9);
64 System.out.println("string4:"+string4);
65
66 /***将字符串转换为字符数组***/
67 char[] chras= string2.toCharArray();
68 System.out.println("chras:"+Arrays.toString(chras));
69
70 /***将字符串进行大小写互换***/
71 String string5 = "CHINA";
72 String string6 = string5.toLowerCase();
73 System.out.println("string6:"+string6);
74 String string7 = string6.toUpperCase();
75 System.out.println("string7:"+string7);
76
77 /***将字符串首位空格去除变成新的数组***/
78 String string8 = " 1832668989 ";
79 String string9 = string8.trim();
80 System.out.println("string9:"+string9);
81
82 /***将其它类型数据(基础类型、引用)转换为字符串***/
83 int i4=57895;
84 String string10 = String.valueOf(i4);
85 System.out.println("string10:"+string10);
86
87 GusseZiMu gusseZiMu = new GusseZiMu();
88 String string11 = String.valueOf(gusseZiMu);
89 System.out.println("string11:"+string11);
90
91 boolean b4 = false;
92 String string12 = String.valueOf(b4);
93 System.out.println("string12:"+string12);
94
95 /***将字符串的(与平台的编码格式有关)
96 ,转换为byte型的数组***/
97 String string13 = "我爱Java";
98 byte[] by1 = string13.getBytes();
99 System.out.println("字节长度:"+by1.length);
100 //字节长度与平台编码格式有关,Unicode编码汉字占两个字节,英文占一个字节
101 System.out.println(Arrays.toString(by1));
102
103 /***返回指定字符在字符串中出现的位置***/
104 String string14 = "1234d157a809a4525a1323";
105 //出现的第一次位置
106 int index1 = string14.indexOf("a");
107 System.out.println("index1:"+index1);
108 //从第九个开始找出现的位置
109 int index2 = string14.indexOf("a",9);
110 System.out.println("index2:"+index2);
111 //出现的最后的位置
112 int index3 = string14.lastIndexOf("a");
113 System.out.println("index3:"+index3);
114
115 /**返回 字符串的长度
116 * 数组的长度是通过获取其属性,字符串是通过方法获取
117 *
118 * ****/
119 int strLength = string14.length();
120 System.out.println("strLength:"+strLength);
121
122 /***字符中的字符替换***/
123 String string15 = "鲁班七号最肉";
124 String string16 = string15.replace('肉', '脆');
125 System.out.println("string16:"+string16);
126 String string17 = string15.replaceAll(" 5|肉", "脆");
127 System.out.println("string17:"+string17);
128
129 /***字符中的字符替换***/
130 String string18 = "灰化肥,发黑,会挥发";
131 String[] string19 = string18.split(",");
132 System.out.println("string19:"+string19);
133
134 }
135
136 public static void test3() {
137 /***判断字符串是否包含某个字符***/
138 String string = "java很吊";
139 boolean c = string.contains("吊");
140 System.out.println(c);
141 }
142 public static void main(String[] args) {
143 test1();
144 test3();
145 test2();
146
147 }
148 }
View Code
2.3第三方包
以上内容是java官方提供的API,也需要了解第三方jar包以及对自己封装的包进行操作。 第三方j常用的是commons-lang3-3.1.jar
常用类:StringUtil类,测试方法如下
1、deleteWhitespace(String string); 删除字符串中所有空格;
2、StringUtils.left(String string, int i); 返回字符串指定范围的字符串;
测试代码:
1 /**
2 *
3 */
4 package API;
5
6 import org.apache.commons.lang3.StringUtils;
7
8 /**
9 * @项目名称:APIDay01
10 * @模块功能:测试第三方
11 * @模块版本:
12 * @JDKVersions:JDK 8.0
13 * @author: Kanekiyi
14 */
15 public class StingUtilDemo {
16
17 public static void main(String[] args) {
18 String string= " 我 哎 你 安家费 hhh 加法 ";
19 System.out.println(string);
20 // 删除字符串中所有空格
21 String string2 = StringUtils.deleteWhitespace(string);
22 System.out.println(string2);
23
24 // 左起截取指定长度字符串
25 String str3=StringUtils.left(string2, 5);
26 System.out.println(str3);
27 }
28
29 }
View Code
五、StringBuffer和StringBuilder
2.1、StringBuffer类和StringBuilder类
1、优点:String类频繁的修改内容就会频繁的创建对象,对资源的开销较大此时能够解决该问题,引入StringBuffer类和StringBuilder频繁的修改String中的内容不会创建新的对象;
2、比较:
StringBuffer:线程安全 安全性高,效率低
StringBuilder:线程不安全 安全性低,效率高
2.2两个类中常见的方法
1.append(String str);在字符串末尾追加字符串
2.insert(int i, String str);在指定位置插入字符串
测试代码:
1 package API;
2
3 /**
4 * @项目名称:APIDay01
5 * @模块功能:
6 * @模块版本:
7 * @JDKVersions:JDK 8.0
8 * @author: Kanekiyi
9 */
10 public class StringBufferDemo {
11 public static void main(String[] args) {
12 StringBuffer stringBuffer = new StringBuffer();
13 // 字符串末尾添加字符串
14 stringBuffer.append("鲁班七号天下无敌");
15 System.out.println(stringBuffer);
16 // 指定位置插入字符串
17 stringBuffer.insert(4, ",");
18 System.out.println(stringBuffer);
19
20 }
21
22 }
View Code
有错误内容或不足之处望指正!!!