java学习初探九之String

来源:互联网 发布:淘宝好评返现处罚条例 编辑:程序博客网 时间:2024/05/29 06:28

一、String简介
1.String类是不可变类,也就是说,String对象声明后,将不可修改。
2.提升字符串的访问效率,在程序中使用了“缓存”技术。所以,在java中所有使用“双引号”括起来的字符串都会在“字符串常量池”中创建一份,字符串常量池在方法区中被存储。
3.在执行过程中,如果程序用到某个字符串,例如“abc”,那么程序会在字符串常量池中去搜索该字符串,如果程序没有找到则在字符串常量池中新建一个“abc”的字符串,如果找到,就直接拿过来用。字符串常量池是一个缓存区,为了提高访问字符串的效率。

package com.array;public class StringTest01 {    public static void main(String[] args) {        //创建一个“abc”字符串对象,该对象内存地址,由s1变量保存。        //s1是一个引用,s1指向abc对象        String s1="abc";        //可以让s1重新指向吗.s1是局部变量,s1前面没有final,所以s1可以重新指向        //但是def字符串本身不可以变        s1="def";        String s2="Hello";//在字符串常量池中新建一个“Hello”字符串对象,该对象不可变。        String s3="Hello";//从字符串常量池中直接拿来用        System.out.println(s2==s3);//true        //比较两个字符串是否相等,不能用"=="        String s4=new String("abc");        String s5=new String("abc");        System.out.println(s4==s5);//false        //比较两个字符串是否一致,必须使用String类提供的equals方法        System.out.println(s4.equals(s5));//true        //以下程序执行结束之后,会在字符串常量池中创建3个字符串对象        //"aaa" "bbb" "aaabbb"        String s6="aaa";        String s7="bbb";        String s8=s6+s7;    }}

二、分析以下程序创建几个对象

package com.array;/* * 分析以下程序创建字符串对象的区别 */public class StringTest02 {    public static void main(String[] args) {        String s1="abc";//只会在字符串常量池中创建一个1个“abc”字符串对象        String s2=new String("hello");//会在字符串常量池中创建一个“hello”字符串对象,并且会在堆中再创建一个字符串对象。这种方式比较浪费内存    }}

这里写图片描述

三、
(1)

package com.array;public class StringTest03 {    public static void main(String[] args) {        //判断以下程序创建了几个对象        //堆中2个,字符串常量池中1个。        String s1=new String("hello");        String s2=new String("hello");    }}

(2)使用String的时候我们应该注意的问题:尽量不要做字符串频繁的拼接操作。因为字符串一旦创建不可改变,只要频繁拼接,就会在字符串常量池中创建大量的字符串对象,给垃圾回收带来问题。

package com.array;public class StringTest04 {    public static void main(String[] args) {        String[] ins= {"sport","music","food","sleep"};        //要求将上面的兴趣爱好拼成成字符串"sport,music,food,sleep"        String temp="";        for(int i=0;i<ins.length;i++) {            if(i==ins.length-1) {                temp += ins[i];            }else {                temp += ins[i]+",";            }        }        System.out.println(temp);    }}

四、字符串常用方法
(1)常用构造方法

package com.array;public class StringTest05 {    public static void main(String[] args) {        //1.        String s1="abc";        //2.        String s2=new String("abc");        //3.        byte[] by= {97,98,99,100};        String s3=new String(by);        System.out.println(s3);//abcd String已经重写了Object中的toString方法        //4.        String s4=new String(by, 1, 2);        System.out.println(s4);//bc        //5.        char[] c1= {'我','是','中','国','人'};        String s5=new String(c1);        System.out.println(s5);//我是中国人        //6.        String s6=new String(c1, 2, 2);        System.out.println(s6);//中国     }}

(2)

package com.array;public class StringTest06 {    public static void main(String[] args) {        //1.char charAt(int index);        char c1="abcdef".charAt(2);        System.out.println(c1);//c        String s1="我是王勇,是坏人!";        char c2=s1.charAt(2);        System.out.println(c2);//王        //2.boolean endsWith(String endStr) 以某个字符串结尾        System.out.println("Hellomyword.java".endsWith("java"));//true        //3.boolean equalsIgnoreCase(String anotherString) 相等判断并忽略大小写        System.out.println("abc".equalsIgnoreCase("AbC"));//true        //4.byte[] getBytes();        byte[] bytes="abc".getBytes();        for(int i=0;i<bytes.length;i++) {            System.out.println(bytes[i]);        }//97 98 99        //5.int indexOf(String str) 子字符串第一次出现在字符串中的索引        System.out.println("http://192.168.1.100:8080/oa/index.jsp".indexOf("/oa"));//25        //6.int indexOf(String str,int fromIndex)        System.out.println("javaoraclec++javavb".indexOf("java",1));//13        //7.int lastIndexOf(String str) 最后一次出现的索引        System.out.println("javaoraclec++javavb".lastIndexOf("java"));//13        //8.int lastIndexOf(String str,int fromIndex)//反向搜索 第一次出现的索引        System.out.println("javaoraclec++javavb".lastIndexOf("java",1));//0        //9.int length() 数组是length属性,String是length()方法        System.out.println("abc".length());//3        //10 String replaceAll(String s1,String s2);        System.out.println("javaoraclec++javavb".replaceAll("java", "mysql"));//将字符串中java用mysql替换,这个程序创建4个字符串对象        //11 String[] split(String s)字符分割        String myTime="2008,08,08";        String[] ymd =myTime.split(",");        for (int i = 0; i < ymd.length; i++) {            System.out.println(ymd[i]);        }        //12 boolean startWith(String s)        System.out.println("/system/login.action".startsWith("/"));//true        //13 String substring(int begin)        System.out.println("/oa/login.action".substring(3));//login.action        //14 String substring(int beginIndex, int endIndex); 前包括,后不包括        System.out.println("/oa/login.action".substring(4, 9));//login        //15 char[] toCharArray()        char[] c3="我是李海波".toCharArray();        for (int j = 0; j < c3.length; j++) {            System.out.println(c3[j]);        }        //16.转换成大写 toUpperCase()        System.out.println("abcdEFg".toUpperCase());//ABCDEFG        //17转换成小写        System.out.println("abcdEFg".toLowerCase());//abcdefg        //18.String trim(); 去除前后空白        System.out.println("      ab   effg   ".trim());//ab   effg        //19.String valueOf(Object obj)        Object o=new Object();        o=null;        //System.out.println(o.toString());//这个会出现空指针异常        System.out.println(o);//null 不会,因为并不是直接调用toString方法,String.valueOf(o)这个方法对空值进行处理了        System.out.println(String.valueOf(o));//null        }}

五、正则表达式
1.正则表达式是一门独立的学科
2.正则表达式是一字符模型,专门做字符串匹配的。
3.正则表达式是通用的
例如:正则表达式”^a{2}$” 表示两个a字符,等同于”aa”
matches(String regex)//是否匹配给定的正则表达式
replaceAll(String regex,String replacement)
\d 数字
\D 非数字
\w 引文字母
\W 非英文字母

原创粉丝点击