一、String类

 String使用非常频繁,用来描述一个字符串.String中实现了很多

 对字符串方便的操作方法.

 String内部使用char[]实现字符串的数据保存

 

 字符串的"字面量(直接量)"也是String类型的实例

  

 String对象是不变对象.对象创建后内容不可更改,这样的规则使

 得String看起来更像简单类型.

 

 String中的每个字符都是有索引值的,第一个字符的索引值为0,

 依次类推

 

 String API

  charAt()   :返回指定索引处的char值

  length()  :返回字符串长度

  trim()    :返回去掉字符串两边的空白(不是空格)

                                的字符串

  toLowerCase() :将字符串中的英文全小写

  toUpperCase() :将字符串中的英文全大写

  indexOf()  :返回给定字符在当前字符串中第一次出

              现的索引值

  lastIndexOf() :返回给定字符在当前字符串中最后一次

        出现的索引值

  endsWith()  :判断当前字符串是否以给定字符串结尾

  startsWith() :判断当前字符串是否以给定字符串开始

  substring()  :截取字符串

  toCharArray() :将字符串转换为字符数组

  

静态字符串

 java在编译期间(javac)凡是遇到"字面量"与常量间的运算,都会

 先运算出结果,在进行编译工作

 例如:

  源代码中:

   String name = "abc" + "def";

  编译期间:

   String name = "abcdef";

 

 

 运行期间当字符串池中有String"字面量"时,java会直接引用,若

 没有才会创建对象

  

  String a = "abc";

  此时,字面量"abc"在String池中不存在,那么java创建一个

  String对象保存"abc",并放入String池中.

  

  String b = "abc";

  当执行到这句话时,"abc"在String池中已经存在,那么java

  会让b直接引用之前创建的字符串对象"abc",而不重复创建

  对象.尽可能优化字符串对象的重用(因为字符串是不变对象

  所以重用不会带来问题)

  

  因为这个特性,所以a==b为true是存在的.

 

二、正则表达式:

 正则表达式的作用:约束字符串的格式

 

字符集:

 []   :方括号表示其中的内容任选其一,代表一个字符

        [1234] 1,2,3,4任选其一

 ()   :表示一组内容,圆括号中可以使用"|"符号

 

 |   :逻辑或关系

        

 ^   :非,除了

     [^12] 除了1或2的其他字符

     

 -   :范围,范围应从小到大  

     [0-9]表示此字符只能是数字

     [a-f]表示此字符只能是a,b,c,d,e,f之一

     [0-6a-fA-F] 0123456abcdefABCDEF

 

 {n,m}  :修饰前一个字符,表示其出现n-m次.n应小于m

 {n}   :修饰前一个字符,表示其出现n次

 {n,}  :修饰前一个字符,表示其出现n次以上   

     0[xX][0-9a-fA-F]{1,8}

     0x7fffffff  int最大值

 

 预定义字符集:

 \d   :表示一个数字.与[0-9]意思一致

 .   :表示任意字符

 \w   :表示单词字符.[0-9a-zA-Z_] 包含个下划线

 \s   :表示空白: \t \n \r \b \p

 

 \D   :表示非数字

 \W   :非单词字符

 \S   :非空白

 

 ?   :修饰前一个字符出现0-1次.  {0,1}

 +   :修饰前一个字符出现1次以上.{1,}

 *   :修饰前一个字符出现任意次. {0,}





 

 注意:"."在正则表达式中代表任意字符,若想表示"."的原意,我们

   需要使用"\."表示

   网页url格式:

 [w]{3}\.[0-9a-zA-Z]+\.com

 

 通过上面的正则表达式,是否能描述

 wwww.sohu.com

 

 可以的.原因在于,正则表示式搜索整个字符串,判断部分内容满足

 格式就可以.





 为了解决让正则表达式全字符匹配.我们需要告诉正则表达式需要

 从字符串的开始到结尾^ $

 ^[w]{3}\.[0-9a-zA-Z]+\.com$

 

 常用的正则表达式: 

  

  邮编 :   ^[0-9][0-9][0-9][0-9][0-9][0-9]$    

      邮编只有6位数字

      ^[0-9]{6}$

      ^\d{6}$

  

  用户名:   单词字符出现8-10次

      ^\w{8,10}$

      ^[0-9a-zA-Z_]{8,10}$

  

     手机号码:   +86 15811111111   

        0086 15811111111

       15811111111

        

        ^(\+86|0086)?\s?\d{11}$

    

     身份证号:     15位或18位

                    18位最后一位有可能是x(大小写均可)

                    ^\d{15}(\d{2}[0-9xX])?$ 

    

     一个坐标:     18  ,  789

           18 789

          ^\d+(\s*,\s*|\s+)\d+$

     

     正确答案:     ABCD  A,B  A B C  A , B

 ^A?(\s*|\s*,\s*)?B?(\s*|\s*,\s*)?C?(\s*|\s*,\s*)?D?$

 

 

     日期格式:     2012-08-17

        ^\d{4}-\d{2}-\d{2}$

        ^\d{4}(-\d{2}){2}$

      

        2012-99-99

        

        

   email   :     ^\w+@\w+(\.(com|cn|net))+$ 

 

=======================================================

String中对正则表达式的支持

 String的API中有几个方法支持正则表达式

 matches()  匹配正则表达式

 slipt()         根据正则表达式拆分字符串

 replaceAll() 将满足正则表达式的部分已给定字符串替换









缓冲字符串StringBuffer和StringBuilder

 String:char[] + 操作  char[]为不变对象

     优点:使用起来更自然,贴近基本类型

     缺点:字符串拼接时资源消耗大!处理速度慢(要创建很多对象)

  

 在进行大规模频繁修改字符串时,String的缺点明显!

 这时应使用缓冲字符串

 

 StringBuffer:char[] + 操作 char[]可变

 

 缓冲字符串中的char[]数组使用一种变长算法自动扩容当前

 char[]长度.以满足其中字符串数据的拼接与修改.

 

 StringBuffer的API:

  insert() :向当前字符串中指定索引处插入字符串

  append() :在当前字符串末尾追加字符串

  delete() :删除字符串中的部分内容

  toString()  :将当前缓冲字符串转换为String









 StringBuilder:和StringBuffer几乎一样,区别在于

      StringBuilder:线程非安全

      StringBuffer :线程安全





 String的拼接优化:

  String s = s1 + s2;

  java实际运行时优化为

String s = new StringBuilder(s1).append(s2).toString();

此处为转载的网址:

转载的出处

05-02 00:13