Java 字符串 与 正则表达式

 字符串:

  String类是不可变类,创建String对象后,该对象中的字符序列不能被改变。

  StringBuffer是可变的字符串,创建StringBuffer对象后可以StringBuffer提供的各种方法改变该对象的字符序列。

 StringBuilder与StirngBuffer基本相似(JDK1.5),不同点是 StringBuilder是线程不安全的,StringBuffer线程安全。

 StringBuilder和StringBuffer是可变类,提供了一系列插入、追加、改变字符串里包含的字符序列的方法。示例如下:

public class Str {

      public static void main(String[] args) {

 StringBuilder sb=new StringBuilder();

  sb.append("HelloIam");

  sb.insert(5, 'J');

  System.out.println(sb);// HelloJIam

  sb.insert(2, "BT");

  System.out.println(sb);// HeBTlloJIam

  sb.replace(0,5, "Str");//将0~5(不包含5)之间的字符替换成"Str"

  System.out.println(sb);//StrloJIam

  sb.delete(0, 5);

  System.out.println(sb);//JIam 

}

}

 String 类常用方法:

    char charAt(int index) :获取index位置上的字符。

    int compareTo(String anotherString) :比较两个字符串大小。相等返回0,不相等时,若较长字符串 前缀 是较短字符串,则返回他们的长度差; 不为前缀时返回第一个不相等的字符差。

    static String copyValueOf(char [] data) : 将字符数组连缀成字符串,与String(char [] content)构造器的功能相同。

   static String copyValueOf(char [] data,int offset,int count): 将char数组的子数组中的元素连缀成字符串,offfset为开始下标,count为长度。

  boolean startsWith(String prefix):该String对象是否以prefix开始。

  boolean endsWith(String suffix): 是否以suffix结尾。

  byte[] getBytes(): 将String对象转换成byte数组。

  String replace(char oldChar,char newChar) :将字符串中第一个 oldChar替换成newChar。

  String substring(int beginIndex) :获取从beginIndex开始到结束的子字符串。

  String substring(int beginIndex,int endIndex):获取从beginIndex到endIndex(不包含)位置的子字符串。

  char [] toCharArray(): 将该String对象转换成char数组。

字符串与基本类型的转换(利用包装类)

 字符串转基本类型: 

1.利用包装类提供的parseXxx(String s)静态方法(除Character类之外所有包装类都提供了该方法)

2.利用包装类的构造器Xxx(String s)构造器。

基本类型转字符串:

1.利用String类的valueOf()方法。

2.直接用连接符号“+”。

    String str="123";    

    int it1=Integer.parseInt(str);

    int it2=new Integer(str);

    String s=String.valueOf(it1);     // float、double类型与之类似。

 正则表达式:

 1.String类提供的特殊方法。

 boolean matchs(String regex) :判断该字符串是否匹配指定的正则表达式。

String replaceAll(String regex,String replacement):将所有匹配regex的子串替换成replacement.

String replaceFirst(String regex,String repalcement):将第一个匹配regex的字串替换成replacement.

String [] split(String regex): 将字符串以regex分隔开将分割的子字符串存入数组。

 2. 创建正则表达式:

                                       正则表达式支持的字符

                                      x                    任意字符x

                                     \0mnn             八进制数mnn所表示的字符

                                     \xhh                十六进制0xhh表示的字符

                                     \uhhhh            十六进制0xhhhh表示的Unicode字符

                                     \t                      制表符('\u0009')

                                     \n                     换行符('\u000A')

                                     \r                      回车符('\u000D')

                                     \f                      换页符('\u000C')

                                     \a                     报警符('\u0007')

                                     \e                     Escape符('\u001B')

                                    \cx                    x对应的控制符。例:\cM匹配 Ctrl-M。x的值必须为字母符号。

 

                                       正则表达式支持的特殊字符

                                    $   匹配一行的结尾。

                                    ^    匹配一行的开头。

                                   ()    标记子表达式的开始和结束位置。

                                   []    用于确定中括号表达式的开始和结束位置。

                                   {}    用于标记子表达式出现的次数。

                                   *     指定表达式可以出现0次或多次。

                                   +    指定表达式可以出现一次或多次。

                                  ?     指定表达式可以出现0次或一次。

                                  .     匹配除换行符\n之外的任何单字符。

                                   \    用于转义下一个字符或指定八进制,十六进制字符。

                                  |    指定两项中选取一项。

上面的正则表达式依然只能匹配单个字符,若要匹配多个字符则需要使用“通配符”,匹配多个字符,系统预定义字符如下:

                                      预定义字符                                             

                                       .       匹配任意字符

                                     \d       匹配0~9的所有数字

                                      \D      匹配非数字

                                       \s      匹配匹配所有空白字符,包括 空格、制表符、回车符、换页符、换行符等。

                                      \S      匹配非空白字符。

                                     \w       匹配所有单词字符,包括 0~9所有数字,26个英文字母和下划线。

                                     \W      匹配非单词字符。                  

特殊情况下,若只想匹配a~f的字母,或者匹配除ab以外的所有小写字母,上面预定义的字符就无能为力了,这时需要方括号表达式。

                                                               方括号表达式

  表示枚举         例如[abc],表示a、b、c其中任意一个字符;[gz]表示g、z任意一个字符。

  表示范围 -      例如[a-f] 表示a-f范围内任意字符;

               [\\u0041-\\u0056],表示十六进制\u0041-\u0056范围的字符。                       

                   范围可以和枚举结合使用,如[a-cx-z],表示a~c,x~z范围内的任意字符。

 表示求否 ^            例如[^abc],表示非a,b,c的任意字符。[^a-f]表示不是a-f范围内的字符。

 表示“与”运算:&&  例如[a-z&&[def]]        a~z和def的交集,表示d、e或f。

                               [a-z&&[^bc]]        a~z之间除了bc以外的任意字符。

                               [a-z&&[^m-p]]    a~z之间范围内除了 m~f之间的任意字符。

  表示“并”运算      并运算与枚举类似。例如[a-d[m-p]] 表示 [a-dm-p]

 

数量标识符的集中模式:

Greedy(贪婪模式):  默认采用贪婪模式。贪婪模式只要符合条件一直匹配下去,直到无法匹配。

Reluctant(勉强模式) :  用问号后缀(?)表示,只会匹配最少字符。

Possessive(占有模式):  用加号后缀(+)表示。

贪婪模式            勉强模式           占用模式             说明

  X ?                      X??                   X?+                 X表达式出现0次或1次。

  X*                        X*?                   X*+                  X表达式出现0次或多次。

  X+                       X+?                  X++                  X表达式出现1次或多次。

  X{n}                    X{n}?                 X{n}+                X表达式出现n次 。

  X{n,}                  X{n,}?                 X{n,}+              X表达式至少出现n次。

  X{n,m}               X{n,m}?             X{n,m}+            X表达式最少出现n次,最多出现n次。

String str="hello,java!";

str.replaceFirst("\\w*","1");    //贪婪模式,结果为1,java!。

str.replaceFirst("\\w*?","1");  //勉强模式,结果为1hello,java!。

  使用正则表达式:

 Pattern p=Pattern.compile("a*b");//将正则表达式字符串编译成Pattern对象。

 Matcher m=p.matcher("aaaaab");    // 使用Pattern对象创建Matcher对象。

 boolean b=m.matches(); //是否匹配

也可以直接使用Pattern类的静态方法matches()进行匹配。(每次调用都需要编译正则表达式字符串,效率不高)

 boolean b=Pattern.matches("a*b","aaaaaab"); //返回true。

Matcher类提供了几个常用的方法:

        find():              返回目标字符串是否包含与Pattern匹配的子串。

        group():           返回上一次与Pattern匹配的子串。

        start():             返回上一次与Pattern匹配的字串在目标字符串中的开始位置。

        end():              返回上一次与Pattern匹配的字串在目标字符串中的结尾位置+1。

        lookingAt():     返回目标字符串前面部分与Pattern是否匹配。

        matches():      返回整个目标是否与Pattern匹配。

        reset():            将现有的Matcher对象应用于一个新的字符序列。

测试:

public class Str {

          public static void main(String[] args) {                                  

                  Pattern p=Pattern.compile("((13\\d)|(15\\d))\\d{8}");

                  String str="我想买一本书,联系我13500003333"

                              +" my phone : 15834561234"+

                              "电话:15300003333";

                  Matcher m=p.matcher(str);

                  if(m.find()){

                       System.out.println(m.group());//13500003333

                       //我想买一本书,联系我嘿嘿 my phone : 嘿嘿电话:嘿嘿

                            System.out.println(m.replaceAll("嘿嘿"));

                          }    
                  }
          }

 

猜你喜欢

转载自blog.csdn.net/u013779129/article/details/81329056