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 }
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

 有错误内容或不足之处望指正!!!

posted @ 2018-08-28 22:50  Kanekiyi  阅读(329)  评论(0编辑  收藏  举报