黑马程序员技术交流社区

标题: 技术贴 [打印本页]

作者: swy157425    时间: 2019-8-20 22:29
标题: 技术贴
***        直接赋值:String 变量 =字符串常量(匿名对象)开辟一个堆内存和栈内存会入池
        构造方法:String 变量 =new String("字符串");会开辟2个堆内存String("字符串")先开
        再new又开,一个栈先后指向;不会自动入次,会产生垃圾,new String("字符串").intern()手工入池
        在String中 String s="abc"; 是定义一个String变量s,jvm会先去字符串池
        找有没有"abc",有就指向"abc",没有就在池中创建一个,再让s指向"abc"
        String s=new String("abc");定义一个String变量s,再到内存中分配新的
        空间"abc",让s指向这个内存地址
                **字符串一旦定义不可改变,改变的是依靠引用关系(堆内存)改变的
        *---关于[set]和[this]的运行过程---*

package cn.cast.xh;

public class StringDemo {
        public static void main (String[]args) {
                //                                                        字符和字符串
                //char s='a';
                //int x=s;
                //System.out.println(x);
                  
                /*                                                         字符串数组
                String str="123456";
                if(isEmnp(str)) {
                        System.out.println("字符串全都有数字组成");
                }else {
                        System.out.println("字符串不全是由数字组成");
                }
        }
        public static boolean isEmnp(String temp) {
                char [] sx=temp.toCharArray();        //字符串转为字符数组
                for(int i=0;i<sx.length;i++) {
                        if(sx[i]<'0'||sx[i]>'9') {        //大于字符9 或者小于字符0
                                                                                //字符数组  要跟 字符 比较的
                                return false;       
                               
                        }
                        System.out.println(sx[i]);
                }
                return true;        */
               
                //                                                                                字节和字符串
               
                String str="helloworld";
                byte [] data=str.getBytes();        //将字符串转为字节数组
                for(int i=0;i<data.length;i++) {
                        System.out.println(data[i]);//104 101 108 108 111 119 111 114 108 100
                        data[i] -=32;                                //将小写改大写
                }
                System.out.println(new String(data));//全部转换
                System.out.println(new String(data,5,5));//部分转换
               
               
               
                //                                                                                字符串的比较
                String stra ="Hello";
                String strb ="hEllo";
                System.out.println(stra.equals(strb));        //false
                System.out.println(stra.equalsIgnoreCase(strb));        //true 不判断大小写
                System.out.println(stra.compareTo(strb));        //返回值为int  正 0 负比较大小
               
               
                //                                                                                查找字符串的内容
                String stt="helloworld";
                System.out.println(stt.contains("z"));        //判断内容是否存在        **
               
                System.out.println(stt.indexOf("world"));//从前开始查找返回满足条件单词的第一个字母的索引
                System.out.println(stt.indexOf("l",5));//从第5个索引开始查找
                System.out.println(stt.lastIndexOf("l"));//从后开始查找返回满足条件单词的第一个字母的索引
                System.out.println(stt.lastIndexOf("xx"));//内容不存在没有找到返回-1
               
                System.out.println(stt.startsWith("h"));        //以什么头
                System.out.println(stt.startsWith("l", 2)); //空2 格以“l”开头
                System.out.println(stt.endsWith("d"));                //以什么结尾
               
               
                //                                                                                字符串替换
                String sttt="helloworld";
                String stttA=sttt.replaceAll("l", "_");        //全部替换
                String stttB=sttt.replaceFirst("l", "_");//替换首个满足要求的
                System.out.println(stttA);
                System.out.println(stttB);
               
                //                                                                                字符串截取
                String sxx="helloworld";
                System.out.println(sxx.substring(2));//从指定索引截取到结尾
                System.out.println(sxx.substring(2, 6));//从指定索引开始截取到指定结尾
               
               
                //                                                                                字符串拆分为字符串数组
                String sbx="hello_world_nihao_mldn";
                String result [] =sbx.split("_");                //凭指定内容全拆                如果没有指定内容则按照美国字符来拆分
                for(int i=0;i<result.length;i++) {
                        System.out.println(result[i]);
                }
                String resultB []=sbx.split("_", 2);        //部分拆分          hello                如果没有指定内容就不会拆分
                for(int i=0; i<resultB.length; i++) {                        //        world_nihao_mldn
                        System.out.println(resultB[i]);
                }
                String sbc="192.120.8.24";
                String resultC [] =sbx.split(".");        //正则不可拆  要转义String resultC [] =sbx.split("\\.");
               
               
                //                                                                                其他方法
                String s1="*(*(HELLO world";
                System.out.println(s1.toUpperCase());        //小转大写                非字母不会改变
                System.out.println(s1.toLowerCase());        //大转小写
                String s2="   hello   world    ";
                System.out.println("【"+s2.trim()+"】");//去掉空格
               
                String s3="hello";                                //“+”和“concat”
                String s4=s3+"world";
                String s5=s3.concat("world");
                String s6="helloworld";
                System.out.println(s4==s6);//false        “+”和“concat”
                System.out.println(s5==s6);//false        都是false所以都开辟出了新的空间
               
                //字符串长度
                System.out.println(s3.length());//数组.length     字符串.length();
                //数据入池
                System.out.println(s3.intern());
                //判断是否是空字符串【空字符串不是null,而是"",长度length是0】
                System.out.println(s3.isEmpty());//false
                System.out.println("".isEmpty());//true                不方便可以用  "".equals(s3);
               
               
               
               
               
                System.out.println("*****************");
                String n1="hello";
                String n2=new String("hello");
                String n3=n2;
                String N="hello"+n1+"def";                        //这里的hello==n1
                System.out.println(n1.equals(n2));
                System.out.println(n1.equals(n3));
                System.out.println(n2.equals(n3));
                System.out.println(n1==n2);
                System.out.println(n1==n3);
                System.out.println(n2==n3);
                System.out.println("hello"==n1);
                               
               
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2