一、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();

此处为转载的网址:

转载的出处

String类、正则表达式的更多相关文章

  1. Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式

    一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...

  2. Java学习笔记21(String类补充:正则表达式)

    正如python的re模块,不过Java和Python的正则表达式有一些区别,这里做简单介绍,具体的细节可以参考网上其他的文章: 功能:可以用于检验一个字符串,比如验证用户名,验证密码格式,验证是否是 ...

  3. java常用类与包装类--常用类正则表达式 String正则方法+Matcher+Pattern

    0.java中的正则 java 中的正则总共涉及三个类(或者说1个String类和一个regex包) java.lang.String java.util. Matcher java.util.Pat ...

  4. Java—API/Obiect类的equals toString方法/String类/StringBuffer类/正则表达式

    API  Java 的API(API: Application(应用) Programming(程序) Interface(接口)) 就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来 ...

  5. C#笔记2__Char类、String类、StringBuilder类 / 正则表达式 /

    Char类 String类 字符串的格式化:String类的Format方法 StringBuilder类 以上:百度 or 查手册.....

  6. String类常用方法

    1.String类的特点,字符串一旦被初始化就不会被改变. 2.String对象定义的两种方式 ①String s = "affdf";这种定义方式是在字符串常量池中创建一个Str ...

  7. String类replaceAll方法正则替换深入分析

    作者网址: https://my.oschina.net/shipley/blog/98973 背景:      前几天有人发了一个关于下面问题的贴,对这个有点好奇,故花时间做了点研究.       ...

  8. String类和StringBuffer类的方法

    一.String类的方法 public char charAt(int index)          返回字符串index个字符 public int length()         返回字符串长 ...

  9. java.lang.String 类的所有方法

    java.lang.String 类的所有方法 方法摘要 char charAt(int index) 返回指定索引处的 char 值. int codePointAt(int index) 返回指定 ...

随机推荐

  1. http://www.html-js.com/article/2328

    React.js编程思想 张小俊128 发布在使用React.js开发web应用2015年8月7日view:33385React 在文章任何区域双击击即可给文章添加[评注]!浮到评注点上可以查看详情. ...

  2. 线程系列4---sleep()和wait()方法区别

    2013-12-25 14:49:00 1. sleep()方法是Thread类的一个静态方法,可以在任意地方被调用,而wait()方法是object类的一个方法,只能在同步代码块或者同步方法里面,通 ...

  3. NIO基础

    通道和缓冲区 概述 通道 和 缓冲区 是 NIO 中的核心对象,几乎在每一个 I/O 操作中都要使用它们. 通道是对原 I/O 包中的流的模拟.到任何目的地(或来自任何地方)的所有数据都必须通过一个 ...

  4. vs 折叠跟展开所有方法。

    Ctrl + M + O: 折叠所有方法 Ctrl + M + M: 折叠或者展开当前方法 Ctrl + M + L: 展开所有方法

  5. Struts2标签<s:textfield/>

    中的name="",取值顺序是,如不加#,先从root中栈顶取,没有取到(即使栈顶有这个属性但是属性为空还是向下取,这点和el表达式不同)就去actioncontext的map中取 ...

  6. poj1160 dp

    //Accepted 564 KB 63 ms //和hdu1227一样 //dp[i][j]=min(dp[i][j],dp[k][j-1]+cost[k+1][i]) //初始化条件,dp[0][ ...

  7. POJ 1185 炮兵阵地(经典的状态压缩DP)

    题意:中文题. 思路,经典的状态压缩题目. 由于列长比较小,我们可以以行为阶段用状态压缩来做. 由于攻击只占两个格,这样从行的角度看,第i行的炮兵只与前i-1和前i-2行有关系.这样如果用j,k,l分 ...

  8. the way of reading English books

    除了datesheet ,我们经常遇到英语文档和资料.找到正确的英语文档的打开方式变的非常必要. 计算机类的书大致归为三大类: (1)语言方面的书.比如C.Java.Python等等 (2)算法书籍. ...

  9. Oracle数据库DECODE函数的使用.

    decode函数是Oracle数据库独有的. 语法为: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 例子:select decode(sign(变量1-变量2) ...

  10. java互斥方法

    synchronized,  lock/unlock,  volatile类型变量, atom类, 同步集合,  新类库中的构件: CountDownLatch\CyclicBarric\Semaph ...