A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

第13天

String 类

String s1 = "abc"
//s1是一个类类型变量
//字符串最大特点:一旦被初始化就不可以被改变

String s1 = "abc"
s1="KK"
虽然打印s1结果是KK
但是其中改变的是s1,abc没有改变

字符串是一个特殊对象

String类 复写了Object类中的equals方法
该方法用于判断字符串是否相同(判断内容是否相同)
==则是判断内容和地址两个是否相同

面试题
String s1 = "abc";
String s = new String("abc");
s1和s2有什么区别
s1在内存中有一个对象("sbc")
s2在内存中有两个对象("abc"和new)

String s1 = "abc";
String s3 = "abc";
s1==s3为true //因为池中有了abc,则不会从新创建新的字符串,而是直接使用

总结:
1,是一个对象。2,是常量,不能够被改变。
3字符串比较有自己有独特的方式,就是equals。4,即s1和s2的区别

String类适用于描述字符串事物
那么它就提供了多个方法对字符串进行操作


常见的操作方法有哪些

1,获取
        1.1字符串中的包含的字符数,也就是字符串的长度。   
           int.length():获取长度
        1.2根据位置获取位置上的某个字符。
           char charAt(int Index);
        1.3根据字符获取该字符在字符串中的位置
           int indexof(int ch):返回的是ch在字符串中出现的位置//ch记得加单引号   'ch'   ch表示一个字符
           int indexof(int ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置

           int indexof(int str):返回的是str在字符串中出现的位置
           int indexof(int str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置

           int lastIndexof(int ch):反向获取

如下例子
public class test {

        public static void main(String[] args)
        {
                method_get();

        }
       
        public static void method_get()
        {
                String str ="abcdeafgsfg";
                //长度
                huoqu(str.length());
                //根据索引获取字符
                huoqu(str.charAt(5));//当访问到字符串中不存在的角标时会出现角标越界异常
                //根据字符获取索引
                huoqu(str.indexOf('a',4));//如果是多个字符,则用双引号,2表示从第2个角标开始查找,如果找不到该字符,则返回-1
                //方向索引一个字符
                huoqu(str.indexOf('a'));
        }
       
        public static void huoqu(Object obj)
        {
               
                System.out.println(obj);
        }
       
       
}







2,判断

2.1,字符串是否包含某一个子串
        boolean contains(str);
        特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1,表示该str不在字符串中存在
                所以,也可以用于对指定判断是否包含
                if(str.indexOf("aa"!=-1));
                而且该方法即可以判断,又可以获取出现的位置
2.2,字符串中是否有内容
        boolean isEmpty();原理就是判断长度是否为0;
2.3,字符串是否是以指定内容开头
        boolean startsWith(str);
2.4,字符串是否是以指定内容结尾
        boolean startsWith(str);
2.5,判断字符串内容是否相同,复写了Object类中的equals方法
        boolean equals(str);
2.6,判断内容是否相同,并忽略大小写
        boolean equalsIgnoreCase();


如下
public class test {

        public static void main(String[] args)
        {
                method_get();

        }
       
        public static void method_is()
        {
                String str =Arrey
                String str = "ArrayDemo.java";
                //判断文件名称是否Array单词开头
                huoqu(str.startsWith("Array"));
                //判断文件名是否是.java的文件
                huoqu(str.endsWith(".java"));
                //判断文件中是否包含Demo
                huoqu(str.contains("Demo"));
        }
       
        public static void huoqu(Object obj)
        {
               
                System.out.println(obj);
        }
       
       
}


3,转换
        3.1,将字符数组转换成字符串
        构造函数:String(char[])
                  string(char[],offset,count);将字符数组的一部分转成字符串

如下
public class test {

        public static void main(String[] args)
        {
                method_trans();

        }
       
        public static void method_trans()
        {
                char[] arr ={'a','b','c','d','e','f','g'};
                String s = new String(arr);
                System.out.println(s);
        }
       
       
}




        静态方法:
                static String copyValueOf(char[]);
                static String copyValueOf(char[] date,int offset,int count)

                static String ValueOf(char[]);
       
       
        3.2,将字符串转换成字符数组**
                char[] toCharArray();
        3.3,将字节数组转成字符串
                String(byte[])
                String(byte[],offset,count);将字节数组的一部分转成字符串
        3.4,将字符串转成字节数组
                byte[] getBytes();
        3.5,将基本数据类型转成字符串
                static String valueOf(int)
                static String calueOf(double)
       


4,替换
        String replace(oldchar,newchar);//也可以替换字符串

        String s = "hello java";
        String s1= s.replace('a','n');//如果要替换的字符不存在,范围的还是原串
        System.out.println(s);
        System.out.println(s1);//s和s1的结果是不一样的,因为一旦被初始化就不可以被改变


5,切割
        String[] split(regex);

public static void method_split()
{
        String s ="zhangsan,lisi,wangwu";
        String[] arr = s.split(",");//用,切割
        for(int x=0;x<arr.length,x++)
        {
        System.out.pringln(arr[x]);
        }

}       


6,子串。获取字符串中的一部分
        String substring(begin);
        String substring(begin,end);

public staitic void method_sub()
{
        String s ="fdsfwesdfsa";
        System.out.println(s.substring(2));//从指定位置开始到结尾,如果角标不存在,会出现角标越界异常
        System.out.println(s.substring(2,5));//包含头,不包含尾。s.substring(0,length());
}
       

7,转换,去除空格,比较
        7.1,讲字符串转换成大写或者小写
        String toUpperCase();
        String tolowwerCase();
        7.2,讲字符串两端的多个空格去除
        String trim();
        7.3,对两个字符串进行自然顺序比较
        int compareTo(string);


题目:13.157视频

模拟一个trim方法,去除字符串两端的空格

将一个字符串进行反转,将字符串中指定部分进行反转“abcdefg”;abfedcg

获取一哥字符串在另一个字符串中出现的次数

获取两个字符中最大相同子串,第一个动作:将短的那个串进行长度一次递减的子串打印


StringBuffer是字符串缓冲区

StringBuffer是一个容器
特点:
1而且长度是可以变化的
2可以自己操作多个数据类型
3最终会通过toString方法编程字符串



CURD
C         U update        R read                D delete


1存储
        StringBuffer append();  将指定数据作为参数添加到已有数据结尾处
        StringBuffer sb = new StringBuffer("abedgds");
        sb.append("fdsfs").append(36).insert(3,"qq");
        StringBuffer insert(index,数据);  可以将数据插入到指定的index位置
        sb.insert(3,"qq");
2删除
        StringBuffer delete(start,end); 删除缓冲区中的数据包含start ,不包含end
        StringBuffer sb = new StringBuffer("abedgds");
        sb.delete(1,3);
        sb.delete(0,sb.length());清空缓存区       
        StringBuffer deleteCharAt(index);  删除指定位置的字符  
        sb.deleteCharAt(3);//删除了d

3获取
        char charAt(int index);
        int indexOf(String str);
        int lastIndexOf(String str);
        int length();
        String substring(int start,int end);

4修改
        StringBuffer replace(start,end,string);
        StringBuffer sb = new StringBuffer("abedgds");
        sb.replace(2,5,"dfs");
        void setCharAt(int index,char ch);
        sb.setCharAt(2,'k')

5反转
        StringBuffer reverse();

6       
        将缓冲区中指定数据存储到指定字符数组中
        void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin);
        StringBuffer sb = new StringBuffer("abedgds");
        char[] chs = new char[6];
        sb.getChars(1,4,chs,1);//从1角标开始到3(不包含4角标),送到chs数组中,从chs数组中的1角标开始



Stringbuffer是线程同步,,,,,建议:多线程用StringBuffer
StringBuilder是线程不同步,,,

       
以后开发建议使用StringBuilder


基本数据类型对象包装类






JDK1.5出现的新特性
Integer x = new Integer(4);
Integer x = 4;//自动装修//new Integer(4)
以上两个是一样的

x=x+2;//x进行自动拆箱,编程了int类型,和2进行假发运算,再将和进行装箱赋值给X

Integer m = 128;
Integer n = 128;
(m==n)//fauls,因为地址不同,和两个new一样
Integer a = 127;
Integer b = 127;
(a==b)//true   因为a和b指向同一个Integer
                因为当数值在byte范围内,对应新特性,如果该数值存在,则不会再开辟新空间


2 个回复

倒序浏览
        赞一个
回复 使用道具 举报
风华正茂 来自手机 中级黑马 2015-8-15 18:06:49
藤椅
楼主写得不错,赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马