JAVA中String类

来源:互联网 发布:jquery ajax json解析 编辑:程序博客网 时间:2024/06/05 07:36

一、由JDK API文档可以了解到

   String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

字符串是常量;它们的值在创建之后不能更改。因为 String 对象是不可变的,所以可以共享。例如:

     String str = "abc";
等效于:

         char data[] = {'a', 'b', 'c'};

String str = new String(data); 

即:一个字符串相当于一个字符数组。

二、区别—String str1="abc";  String str2=new String("abc")

① String str1="abc"——创建了一个对象,或是没有创建对象。

     先去方法区中的字符串常量池中查看有没有abc,若是有—不用再创建对象,直接将地址给栈中的str1。若是没有,则在字符串常量池中再创建一个对象,传给str1。

② String str2=new String("abc")——创建了一个或两个对象,其相当于语句

   i): 若是之前字符串常量池中没有abc,那么显而易见是创建了两个对象。

  ii): 若是之前字符串常量池中就存在abc,那么就是创建了一个对象,解释如下:

     1.String str1 = "abc";       2.String str2 = new String("abc"); 
       测试一下,通过javac *.java编译好该Java文件,然后通过反编译命令javap来查看java编译后的ByteCode字节码。

  

ldc的含义是:将常量值从常量池中取出来并且压入栈中。从上图中,我们可以看到第0行和第7行中的字符串引用是同一个,这说明了,在编译期间,该字符串变量的值已经确定了下来,并且将该字符串值缓存在缓冲区中,同时让该变量指向该字符串值,后面如果有使用相同的字符串值,则继续指向同一个字符串值。

所以String str2 = new String("abc"); 此时就创建一个对象,而abc 则是从字符串常量缓冲区中取出来的。

三、String中常用方法,代码举例

equals(Object anObject) ——将此字符串与指定的对象比较。

 equalsIgnoreCase(String anotherString) ——将此String 与另一个 String 比较,不考虑大小写。

public class Demo5 {public static void main(String[] args) {{String a="abcde";String b="abcdE";System.out.println(a.equals(b));  //falseSystem.out.println(a.equalsIgnoreCase(b));  //true}}}
②  isEmpty()——当且仅当 长度0 时返回 true

注:当定义字符串为String a=null,运行System.out.println(a.isEmpty());会报出空指针异常Exception in thread "main"     java.lang.NullPointerException 编写程序中为了避免这种错误,通常自定义方法进行判断,如下:

{//String a="abcdegfjkakfdh";//System.out.println(a.isEmpty());  //falseString a=null;System.out.println(isEmpty(a));    //true//System.out.println(a.isEmpty());   //空指针异常}private static boolean isEmpty(String a) {return a==null||a.length()==0;}
③ 正序——indexOf    倒序——lastIndexOf

{String a="abcdefagh";System.out.println(a.indexOf('c'));    //2System.out.println(a.indexOf("cd"));   //2System.out.println(a.indexOf('a', 2)); //6System.out.println(a.lastIndexOf('a')); //6    //应用,查找文件名String path="D:\\day01\\java环境搭建.xmind";// 想知道这个文件的名字。int lastIndexOf = path.lastIndexOf("\\");System.out.println(path.substring(lastIndexOf+1));//java环境搭建.xmind}
④ subString——返回新的字符串(子串),例:打印出一个字符串的所有子串

{String a="abc";int n=a.length();int num=n*(n+1)/2;String[] s=new String[num];       //将字符串a的多有子串求出来存到数组s中int index=0;for(int i=0;i<a.length();i++){for(int j=i+1;j<=a.length();j++){s[index]=a.substring(i,j);index++;}}   //打印子串   a ab abc b bc cfor (int i = 0; i < s.length; i++) {System.out.println(s[i]);}}
⑤ replace——用指定的字符串替换指定的内容     replaceAll(旧串,新串)  replaceAll比较常用

replaceAll应用一:贴吧中消除敏感字(如:脏字)

{String[] zang={"艹","草"};String s="草 艹 号";for(int i=0;i<zang.length;i++){s=s.replaceAll(zang[i],"*");}System.out.println(s);}
replaceAll应用二:将电话号码中间四位数隐藏,如15623456789——>156****6789

{String str="15635446789";System.out.println(str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));}
⑥ 大小写转换
toUpperCase()——将字符串中字符全部转换为大写
toUpperCase()——将字符串中字符全部转换为小写

{String s="abCEd";System.out.println(s.toUpperCase());  //ABCEDSystem.out.println(s.toLowerCase());  //abced}  
⑦ split——将字符串切割成数组
注:有的切割符的匹配需要转译,如切割符点 ,转译为\\.

{String cookie="a.b.c.d";String[] split = cookie.split("\\.");for (int i = 0; i < split.length; i++) {System.out.println(split[i]);}}
⑧ 匹配 maches

应用一——邮箱

{String str="1@bjsxt.com";System.out.println(str.matches("\\w+@\\w+(\\.\\w+)+"));}

应用二——手机号

{String str="15633335555";System.out.println(str.matches("^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$"));}
⑨ trim()——去掉前后空格

应用——登录

{String account="     123456     ";if("123456".equals(account.trim())){System.out.println("登录成功");}else{System.out.println("登录失败");}}
⑩ startsWith endsWith

原创粉丝点击