java基础之API(String)

day01

 String

    是一个final类型的  不能被继承,字符串的对象不会改变(里面char[]字符数组的值不能被改变),字符串的引用变量可以改变

 

String 对象的创建(有很多种,归纳为4种)

1)初始化的同时为该对象赋予值   String str =”Hello”;

2)  使用new 关键字  String str = new String(“hello”);

3)  通过任何可以返回字符串的方法,用一个String 变量接受这些返回值的同时就创建了该对象

4)使用一个字符串常量就会自动创建String 对象   ”njcjk”.length();  “fdf”+”fdsfds”;

 

String 常量池

扫描二维码关注公众号,回复: 1852205 查看本文章

 为了提高性能静态字符串(字面量(直接写出来的)常量  常量连接的结果)在常量池中创建  并尽量使用同一个对象重用静态字符串  对于重复出现的字符串直接量会在常量池中查找并且返回  

 

 (变量连接的结果 ) a 创建动态新字符串对象是新对象  b 利用NEW运算创建的字符串是新对象 

但是参数“ ABC”  是静态字符串对象来自常量池  

 

两个字面量(常量)的连接时在编译器中优化计算为一个字符串对象  在运行期按照 “ABC”进行常量优化

 

 String s3 =“ABC”;

   String s4 = “ABC”

   String s5 = “A”+”BC”;

      s3==s4    true  值相等  引用地址也相等

         s3s4引用同一个对象   优点是重用了 

   s3 == s5  引用地址相同  这都用到了常量池

 

  String s6 = newString(“ABC”);

  S3==S6; false

 

  String s7 =”A”;

  String s8  =s7+ “BC” ;

  s8==s3; false

 

 == 基本变量比较的是   引用变量比较的是  引用的地址

  基本变量是赋予值  引用变量是指向

equals()用来比较引用类型是否相等  object默认给的是== 一样  一般子类会重写此方法根据业务逻辑给出具体的要求

 

 

byte[] bytes = s1.getBytes("UTF-8");

                   System.out.println(bytes.length);

s1中的内容进行编码,中文windows采用GBK(一个字符有三个字节), LinuxMac采用UTF-8(一个字符编译三个字节). getBytes方法不是检查内存中字符串占用的字节数量,因为不固定但是可以传参进行固定  主要用于字符串在网络传输过程中乱码问题的解决

 

 

加上重载的方法一共67个方法  构造方法就11

常用的方法:

  一个空格也代表占用一个字符

   int a      indexOf(String[char] a);  取出字符第一次出现的位置找不到字符就返回-1

  String s  subString(7,7+4) ; 可以从7 开始节取4个字符  遵循左闭右开

  String s  subString(7) ;  7开始  到最后全部  2 都是关闭的

  char c   chatAt(int a) ;  取出位置的字符

  以上的数字都是下标从零开始的

 

    String s  trim(String s) ; 去掉前后空白部分

   booleanstartsWith(String s); //是否以那个字符开头

  booleanendsWith(String s)  //是否以那个字符结尾     区分大小写的   一个字符或者多个字符  空格也可以检测   任何字符和空字符串相比都是true 注意与空格的区别 

  int  n  length() 字符串的长度    

  String  s   toUpperCase(String a) 变成大写

  String  s   toLowerCase(String a) 变成小写

 

  booleanequalsIgnoreCase(String another) 比较字符串与anther 是否一样忽视大小写

将此String与另一个String比较,不考虑大小写。如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。

 

 int lastIndexOf()返回指定字符在此字符串中最后一次出现处的索引。

 String replace(charold,char new );  在字符串中用新的替换旧的

 

 String []  spilt (String s)   按照指定的分割符分割成字符串数组  并返回

public String[]split(String regex)   将分割的字符去掉  或者符和匹配的内容去掉

根据给定正则表达式的匹配拆分此字符串。

该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括                                                                                                                                                                                                                                                                                                             

例如,字符串"boo:and:foo" 使用这些表达式可生成以下结果:

Regex

结果

:

{ "boo", "and", "foo" }

o

{ "b", "", ":and:f" }

 

 

  String  valueOf(int s) ; 基本类型转换成字符串

 

 char[]

toCharArray()
          将此字符串转换为一个新的字符数组。

 

 boolean compareTo(); 按照顺序比较每个字符的unicode 编码

 负数  

 整数

  相等

 

 String

concat(String str)
          将指定字符串连接到此字符串的结尾。

 boolean

contains(CharSequence s)
          当且仅当此字符串包含指定的 char 值序列时,返回 true。只能是字符串

 

public boolean isEmpty()

当且仅当length() 为 0 时返回true。

staticString  valueOf(int a);   将一个int 类型的 返回一个字符串

返回 int 参数的字符串表示形式。

该表示形式恰好是单参数的 Integer.toString ()方法返回的结果。

StringtoString();返回字符串本身

 

/*

                             * 测试字符串的 trim() 方法

                             * 此字符串移除了前导和尾部空白的副本;如果没有前导和尾部空白,则返回此字符串。  否则返回新的对象

                             */

                            Strings1="\r\n Hello  \t\r\n";

                            Strings2="Hello";

                            Strings3=s1.trim();

                            Strings4=s2.trim();

                            System.out.println(s3);

                            System.out.println(s4==s2);//true

 

 

/*

                             * startsWith 方法演示

                             * 检查字符串是否以指定字符串为开头的。

                             */

                            Stringstr="王宝强";

                            booleanb=str.startsWith("");

                            System.out.println(b);//true

                           

                            b=str.startsWith("");

                            System.out.println(b);//true

                           

                            b=str.startsWith("王宝");

                            System.out.println(b);

 

 

 2  StringBuilder

 StringBuilderbuf=newStringBuilder();

           //length() 检查数组中有效字符个数

              System.out.println(buf.length());

               //capacity() 容量:字符数组的实际长度默认为 16

              System.out.println(buf.capacity

 

 

StringBuilder(int capacity)
          构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。

StringBuilder(String str)

 

StringBuilder它里面的方法的索引位置都是左闭右开  通常都是66+4

  append(String s);

   insert(3,ih);

  delete(3.op);

  replace();

  reserve();

 

 String

substring(int start)
          返回一个新的 String,它包含此字符序列当前所包含字符的子序列。

 String

substring(int start, int end)
          返回一个新的 String,它包含此序列当前所包含字符的子序列。

 

 int

capacity()
          返回当前容量。

 

 

具体看API

/*

                    * 可变字符串StringBuilder演示

                             */

                            StringBuilderbuf=new StringBuilder();

                            //length()检查数组中有效字符个数

                            System.out.println(buf.length());

                            //capacity()容量:字符数组的实际长度

                            System.out.println(buf.capacity());

                            buf.append("传奇");

                            System.out.println(buf.length());

                            System.out.println(buf.capacity());

                            buf.append("哪一年在家里的时候");

                            buf.insert(3,"据说");

                            System.out.println(buf.capacity());                           

                            buf.append("天天学习");

                            System.out.println(buf.capacity());

                            //检查字符串的内容

                            System.out.println(buf);

                            //替换字符

                            //StringBuilderAPI,适合函数式连写

                            buf.replace(1,1+2, "老湿")

                               .delete(16, 16+2)

                               .append("吃鸡");

                            System.out.println(buf);

                           

 

连续的字符串连接 s3 = s1 + s1 + s1 + s2;

JAVA 自动利用StringBuilder进行处理不需要利用 StringBuilder去优化

 

 

 

API  文档

 stringBuffer    StringBuild;

 stringBuffer线称安全   性能较慢

StringBuild; 线称不安全   性能较快

 */

                            Strings1 = "A";

                            Strings2 = "B";

                            /*

                             * Java 中字符串链接功能是利用StringBuilder

                             * 实现的,s3= s1+s2 相当于

                             * s3 = new StringBuilder(s1)

                             *     .append(s2).toString();

                             */

                            Strings3 = s1+s2;

                            s3= s1+s3;//创建 StringBuilder

                            s3= s1+s3;//创建 StringBuilder

                            s3= s1+s3;//创建 StringBuilder

                            s3= s1+s3;//创建 StringBuilder

                           

                            StringBuilderbuf=new StringBuilder(s2);

                            buf.insert(0,s1);

                            buf.insert(0,s1);

                            buf.insert(0,s1);

                            buf.insert(0,s1);

                            s3= buf.toString();

                           

                            /*

                             * 性能测试

                             */

                            testString(10000);

                            testStringBuilder(10000);

                           

                           

                            /*

                             * 连续的字符串连接

                             * s3 = s1 + s1 + s1 + s2;

                             * Java 会自动利用一个StringBuilder进行处理

                             * 不需要利用StringBuilder 去优化性能。

                             *

                             * 字符串字面量会在编译器期间优化为一个字符串

                             * 对象

                             * s3 = "A" + "B" +"C" + "D"

                             * s3 = "A" + 1 + 2 + 3;

                             */

              }

              /**

               * 测试String的连接性能

               */

              publicstatic void testString(int n){

                            longt1 = System.nanoTime();

                            Strings="";

                            for(inti=0; i<n; i++){

                                          s= s+"A";

                            }

                            longt2 = System.nanoTime();

                            System.out.println(t2-t1);

              }

              /**

               * 测试StringBuilder的连接性能

               */

              publicstatic void testStringBuilder(int n){

                            longt1=System.nanoTime();

                            StringBuilderbuf=new StringBuilder();

                            for(inti=0; i<n; i++){

                                          buf.append("A");

                            }

                            longt2=System.nanoTime();

                            System.out.println(t2-t1);

              }

 


day01

 

  1  String

    是一个final类型的  不能被继承,字符串的对象不会改变(里面char[]字符数组的值不能被改变),字符串的引用变量可以改变

 

String 对象的创建(有很多种,归纳为4种)

1)初始化的同时为该对象赋予值   String str =”Hello”;

2)  使用new 关键字  String str = new String(“hello”);

3)  通过任何可以返回字符串的方法,用一个String 变量接受这些返回值的同时就创建了该对象

4)使用一个字符串常量就会自动创建String 对象   ”njcjk”.length();  “fdf”+”fdsfds”;

 

String 常量池

 为了提高性能静态字符串(字面量(直接写出来的)常量  常量连接的结果)在常量池中创建  并尽量使用同一个对象重用静态字符串  对于重复出现的字符串直接量会在常量池中查找并且返回  

 

 (变量连接的结果 ) a 创建动态新字符串对象是新对象  b 利用NEW运算创建的字符串是新对象 

但是参数“ ABC”  是静态字符串对象来自常量池  

 

两个字面量(常量)的连接时在编译器中优化计算为一个字符串对象  在运行期按照 “ABC”进行常量优化

 

 String s3 =“ABC”;

   String s4 = “ABC”

   String s5 = “A”+”BC”;

      s3==s4    true  值相等  引用地址也相等

         s3s4引用同一个对象   优点是重用了 

   s3 == s5  引用地址相同  这都用到了常量池

 

  String s6 = newString(“ABC”);

  S3==S6; false

 

  String s7 =”A”;

  String s8  =s7+ “BC” ;

  s8==s3; false

 

 == 基本变量比较的是   引用变量比较的是  引用的地址

  基本变量是赋予值  引用变量是指向

equals()用来比较引用类型是否相等  object默认给的是== 一样  一般子类会重写此方法根据业务逻辑给出具体的要求

 

 

byte[] bytes = s1.getBytes("UTF-8");

                   System.out.println(bytes.length);

s1中的内容进行编码,中文windows采用GBK(一个字符有三个字节), LinuxMac采用UTF-8(一个字符编译三个字节). getBytes方法不是检查内存中字符串占用的字节数量,因为不固定但是可以传参进行固定  主要用于字符串在网络传输过程中乱码问题的解决

 

 

加上重载的方法一共67个方法  构造方法就11

常用的方法:

  一个空格也代表占用一个字符

   int a      indexOf(String[char] a);  取出字符第一次出现的位置找不到字符就返回-1

  String s  subString(7,7+4) ; 可以从7 开始节取4个字符  遵循左闭右开

  String s  subString(7) ;  7开始  到最后全部  2 都是关闭的

  char c   chatAt(int a) ;  取出位置的字符

  以上的数字都是下标从零开始的

 

    String s  trim(String s) ; 去掉前后空白部分

   booleanstartsWith(String s); //是否以那个字符开头

  booleanendsWith(String s)  //是否以那个字符结尾     区分大小写的   一个字符或者多个字符  空格也可以检测   任何字符和空字符串相比都是true 注意与空格的区别 

  int  n  length() 字符串的长度    

  String  s   toUpperCase(String a) 变成大写

  String  s   toLowerCase(String a) 变成小写

 

  booleanequalsIgnoreCase(String another) 比较字符串与anther 是否一样忽视大小写

将此String与另一个String比较,不考虑大小写。如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。

 

 int lastIndexOf()返回指定字符在此字符串中最后一次出现处的索引。

 String replace(charold,char new );  在字符串中用新的替换旧的

 

 String []  spilt (String s)   按照指定的分割符分割成字符串数组  并返回

public String[]split(String regex)   将分割的字符去掉  或者符和匹配的内容去掉

根据给定正则表达式的匹配拆分此字符串。

该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括                                                                                                                                                                                                                                                                                                             

例如,字符串"boo:and:foo" 使用这些表达式可生成以下结果:

Regex

结果

:

{ "boo", "and", "foo" }

o

{ "b", "", ":and:f" }

 

 

  String  valueOf(int s) ; 基本类型转换成字符串

 

 char[]

toCharArray()
          将此字符串转换为一个新的字符数组。

 

 boolean compareTo(); 按照顺序比较每个字符的unicode 编码

 负数  

 整数

  相等

 

 String

concat(String str)
          将指定字符串连接到此字符串的结尾。

 boolean

contains(CharSequence s)
          当且仅当此字符串包含指定的 char 值序列时,返回 true。只能是字符串

 

public boolean isEmpty()

当且仅当length() 为 0 时返回true。

staticString  valueOf(int a);   将一个int 类型的 返回一个字符串

返回 int 参数的字符串表示形式。

该表示形式恰好是单参数的 Integer.toString ()方法返回的结果。

StringtoString();返回字符串本身

 

/*

                             * 测试字符串的 trim() 方法

                             * 此字符串移除了前导和尾部空白的副本;如果没有前导和尾部空白,则返回此字符串。  否则返回新的对象

                             */

                            Strings1="\r\n Hello  \t\r\n";

                            Strings2="Hello";

                            Strings3=s1.trim();

                            Strings4=s2.trim();

                            System.out.println(s3);

                            System.out.println(s4==s2);//true

 

 

/*

                             * startsWith 方法演示

                             * 检查字符串是否以指定字符串为开头的。

                             */

                            Stringstr="王宝强";

                            booleanb=str.startsWith("");

                            System.out.println(b);//true

                           

                            b=str.startsWith("");

                            System.out.println(b);//true

                           

                            b=str.startsWith("王宝");

                            System.out.println(b);

 

 

 2  StringBuilder

 StringBuilderbuf=newStringBuilder();

           //length() 检查数组中有效字符个数

              System.out.println(buf.length());

               //capacity() 容量:字符数组的实际长度默认为 16

              System.out.println(buf.capacity

 

 

StringBuilder(int capacity)
          构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。

StringBuilder(String str)

 

StringBuilder它里面的方法的索引位置都是左闭右开  通常都是66+4

  append(String s);

   insert(3,ih);

  delete(3.op);

  replace();

  reserve();

 

 String

substring(int start)
          返回一个新的 String,它包含此字符序列当前所包含字符的子序列。

 String

substring(int start, int end)
          返回一个新的 String,它包含此序列当前所包含字符的子序列。

 

 int

capacity()
          返回当前容量。

 

 

具体看API

/*

                    * 可变字符串StringBuilder演示

                             */

                            StringBuilderbuf=new StringBuilder();

                            //length()检查数组中有效字符个数

                            System.out.println(buf.length());

                            //capacity()容量:字符数组的实际长度

                            System.out.println(buf.capacity());

                            buf.append("范传奇");

                            System.out.println(buf.length());

                            System.out.println(buf.capacity());

                            buf.append("哪一年在家里的时候");

                            buf.insert(3,"据说");

                            System.out.println(buf.capacity());                           

                            buf.append("天天学习");

                            System.out.println(buf.capacity());

                            //检查字符串的内容

                            System.out.println(buf);

                            //替换字符

                            //StringBuilderAPI,适合函数式连写

                            buf.replace(1,1+2, "老湿")

                               .delete(16, 16+2)

                               .append("吃鸡");

                            System.out.println(buf);

                           

 

连续的字符串连接 s3 = s1 + s1 + s1 + s2;

JAVA 自动利用StringBuilder进行处理不需要利用 StringBuilder去优化

 

 

 

API  文档

 stringBuffer    StringBuild;

 stringBuffer线称安全   性能较慢

StringBuild; 线称不安全   性能较快

 */

                            Strings1 = "A";

                            Strings2 = "B";

                            /*

                             * Java 中字符串链接功能是利用StringBuilder

                             * 实现的,s3= s1+s2 相当于

                             * s3 = new StringBuilder(s1)

                             *     .append(s2).toString();

                             */

                            Strings3 = s1+s2;

                            s3= s1+s3;//创建 StringBuilder

                            s3= s1+s3;//创建 StringBuilder

                            s3= s1+s3;//创建 StringBuilder

                            s3= s1+s3;//创建 StringBuilder

                           

                            StringBuilderbuf=new StringBuilder(s2);

                            buf.insert(0,s1);

                            buf.insert(0,s1);

                            buf.insert(0,s1);

                            buf.insert(0,s1);

                            s3= buf.toString();

                           

                            /*

                             * 性能测试

                             */

                            testString(10000);

                            testStringBuilder(10000);

                           

                           

                            /*

                             * 连续的字符串连接

                             * s3 = s1 + s1 + s1 + s2;

                             * Java 会自动利用一个StringBuilder进行处理

                             * 不需要利用StringBuilder 去优化性能。

                             *

                             * 字符串字面量会在编译器期间优化为一个字符串

                             * 对象

                             * s3 = "A" + "B" +"C" + "D"

                             * s3 = "A" + 1 + 2 + 3;

                             */

              }

              /**

               * 测试String的连接性能

               */

              publicstatic void testString(int n){

                            longt1 = System.nanoTime();

                            Strings="";

                            for(inti=0; i<n; i++){

                                          s= s+"A";

                            }

                            longt2 = System.nanoTime();

                            System.out.println(t2-t1);

              }

              /**

               * 测试StringBuilder的连接性能

               */

              publicstatic void testStringBuilder(int n){

                            longt1=System.nanoTime();

                            StringBuilderbuf=new StringBuilder();

                            for(inti=0; i<n; i++){

                                          buf.append("A");

                            }

                            longt2=System.nanoTime();

                            System.out.println(t2-t1);

              }

 


猜你喜欢

转载自blog.csdn.net/qq_34475529/article/details/80863527