一、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. Jquery API Hybrid APP调研

    http://jquery.cuishifeng.cn/source.html   hybrid app Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间 ...

  2. bzoj 2326: [HNOI2011]数学作业

    #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #defin ...

  3. visual studio 2013连接Oracle 11g并获取数据:(一:环境搭建)

    C# WinForm案例: 目标: visual studio 中点击按钮,就可获取到Oracle中数据表的内容 1.安装Visual Studio 2013 ,推荐如下网址,下载ISO镜像,一路ne ...

  4. C++-不要在构造和析构函数中调用虚函数

    在实习的单位搞CxImage库时不知为什么在Debug时没有问题,但是Release版里竟然跳出个Pure virtual function call error! 啥东西呀,竟然遇上了,就探个究竟吧 ...

  5. ppurl

    ppurl 就这么挂了?? 简直不敢相信 我才刚上不久,它竟然就这么挂啦??? 还是转到哪了? 有人知道吗? 表示我很愤怒,就好像当年新浪爱问共享就这么挂了一样 过了很久我才知道原来它转到新浪微盘了. ...

  6. IE和火狐 差异

    1.JavaScript中 1)IE和FireFox中childNodes的差别: <head> <script type="text/javascript"&g ...

  7. MongoDB的安装、配置服务(转)

      一,简介  MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.  MongoDB是一个高性能,开源,无模式的文档型数据库,是当前 ...

  8. php注册审核显示

    用户进行注册,管理员通过审核后,使用户通过审核 数据库建表 create database mydb; use mydb; create table User ( Uid int auto_incre ...

  9. (转) mysql的连接,创建账号,修改密码

    原文:http://blog.chinaunix.net/uid-20749043-id-1878306.html  mysql的连接,创建账号,修改密码 2008-10-13 15:31:29 分类 ...

  10. List<T>Contains, Exists, Any之间的优缺点对比

    在List<T>中,Contains, Exists, Any都可以实现判断元素是否存在. 性能方面:Contains 优于 Exists 优于 Any 测试的代码: public sta ...