JavaAPI学习(一):API && String类 && Stringbuffer && StringBuilder
一、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"即为一个对象;
2、位置: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)
1.charAt(int index);返回指定位置的字符
练习:
检查一句话是否为回文?
回文:上海自来水来自海上
参考代码:StringDemo.java
2.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 }
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 }
五、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 }
有错误内容或不足之处望指正!!!