java String

    xiaoxiao2021-03-26  13

    一、String 类

    字符串是一个特殊的对象;字符串一旦初始化就不可以被改变;String str=“abc”;String str1 = new String("abc");有什么区别呢?

    二、Java.lang.String (不能有子类)

    public final classString extends ObjectimplementsSerializable,Comparable<String>,CharSequence

     class StringDemo  { public static void main(String[] args)  { /* String s1 = "abc";//s1是一个类类型变量, "abc"是一个对象。 //字符串最大特点:一旦被初始化就不可以被改变。 String s2 = new String("abc"); //s1和s2有什么区别? //s1在内存中有一个对象。 //s2在内存中有两个对象。 System.out.println(s1==s2); System.out.println(s1.equals(s2));//String类复写了Object类中equals方法, //该方法用于判断字符串是否相同。 */ String s = "abcde"; method_1(s); } /* String类是对字符串事物的描述。 该类定义了专门用于操作字符串的方法。 "abc": */ public static void method_1(String s) { char ch = s.charAt(3); System.out.println("ch="+ch); int num = s.codePointAt(3); System.out.println("num="+num); String s1 = "qq"; s1 = s1.concat("mm"); System.out.println("s1="+s1); System.out.println("qq"+"mm"); String a = "opq"; String b = "opq"; System.out.println("a==b:"+(a==b)); } }

    1>

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

    2> 

    s1=“kk”; 这时s1引用的对象地址发生改变,“abc对象不变”.改变s1的指向

    3>

    String s1=“abc”;

    String s2=new String(“abc”);

    String s3=“abc”;

    a1和a3比较s1==s3 返回true

    s1和s2进行对比,结果分别是:false,true   

    分析结果:

    false:通过new String(“abc”)这样的方式是new一个新的String对象,没有查找内存池,所以返回false。

    true:在Object里面的equals方法,比较对象的地址,但String类里面重写了equals方法,建立了自己对象独特的内容。该方法用于判断字符串是否相同。

    4>

    s1和s2 有什么区别?

    s1在内存中有一个对象。  “abc”

    s2在内存中有两个对象。new String ,  “abc”

    5>

    字符串在内存中有常量池,存储各个字符串,只要字符串相同,及指向同一个对象。

    三.String (常见功能-获取和判断)

    String 类适用于描述字符串事物,那么他就提供了多个方法对字符串进行操作,常见的操作有哪些?

    1.获取

    1.1 字符串中包含的字符数,也就是字符串的长度。

              int length();  获取长度(数组获取长度的是length 常量)

    1.2 根据位置获取位置上某个字符。(此字符串制定索引处的 char值,第一个 char 值位于索引 0处)

              char charAt(int index)

    1.3 根据字符获取该字符在字符串中位置

              

    int indexOf(int ch):                    返回的是ch在字符串中第一次出现的位置。传入的值是(包括 0 和 0xFFFF) int indexOf(int ch, int fromIndex) :   从fromIndex指定位置开始,获取ch在字符串中出现的位置。

    int indexOf(String str):                返回的是str在字符串中第一次出现的位置。(找不到返回-1)

    int indexOf(String str, int fromIndex) :从fromIndex指定位置开始,获取str在字符串中出现的位置。

    int lastIndexOf(int ch) :             返回指定字符在此字符串中最后一次出现处的索引。

    int lastIndexOf(int ch, intfromIndex) :

    int lastIndexOf(String str):

    int lastIndexOf(String str,int fromIndex) :

    特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。

     所以,也可以用于对指定判断是否包含。

        if(str.indexOf(“aa”)!=-1)

    而且该方法即可以判断,又可以获取出现的位置。

    2.判断

    2.1 字符串中是否包含某一子串。传入的参数为接口类型,Java.lang.CharSequence

    boolean contains(str);

    2.2 字符串中是否有内容

    boolean isEmpty():原理就是判断长度是否为0

    2.3 字符串是否以指定的开头

    boolean statsWith(str)

    2.4 字符串是否以指定内容结尾

    boolean endsWith(str)

    2.5 判断字符串内容是否相同.复写了Object 类中的equals方法

    boolean equals(str)

    2.6 判断内容是否相同,并忽略大小写

    boolean equalsIgnoreCase();

    3.转换  

          3.1 将字符数组转化成字符串

          构造函数 :String (char [] )

                               String (char[],offset,count): 将字符数组中的一部分转化为字符串。

           静态方法:static String copyValueOf(char[] data);

                               static String copyValueOf  (char[] data,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 valueOf(double)

               // 3 + .///   String.valueOf(3):

          特殊:字符串和字节数组在转换过程中,是可以指定编码表的

    4.替换

                String replace ( char oldChar,char newChar):

                如果替换的字符串不存在,返回的还是原串。

    5.切割

                 String[]  split(regex):

       //注意必须是这个格式  ,正则表达式

    6.子串 。获取字符串中的一部分

    String  substring(begin):

    String substring(begin,end):

                           返回一个新字符串,他是此字符串的一个子字符串。该字符串从指定的beginIndex 处开始,直到索引endIndex - 1 处的字符。因此该子字符串的长度为endIndex-beginIndex。

     7.转换,去除空格,比较。

       7.1将字符串转化成大写或者小写

    String toUpperCase():

    String toLowerCase():

       7.2 将字符串两端多个空格去除

    String trim();

        7.3 对两个字符串进行自然比较

    int copareTo(string ):

       String s1 = "a1c";  String s2="aaa";    sop(s1.compareTo(s2));

    因为在第二位,2个字符不同,所以第三个字符不用比较。 结果 -48、s1< s2

    返回:如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。

    四、String (字符串)练习

         字符串的长度和字符串的角标是两个概念,长度是从1开始,角标是从 0 开始

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

        思路:1.判断字符串第一个位置是否为空格,如果是继续向下判断,直到不是空格为止,结尾处判断空格也是如此

                     2.当开始和结尾判断到不是空格的时候就是要获取的字符串

    2> 将一个字符串进行反转 。将字符串中指定部分进行反转,"abcdefg“”:

        思路:  1. 曾经学习过对数组的元素进行反转

                       2.将字符串变成数组,对数组反转

                       3.将反转后的数组变成字符串

                        4.只要将反转的部分的开始和结束为止作为参数的传递即可

    3> 

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

      "abkkcdkkefkkskk"

      思路:

      1>定义个计数器。

      2>获取kk第一次出现的位置。

      3>从第一次出现位置后剩余的字符串中继续获取kk出现的位置。

       每获取一次就计数一次。

      4>当获取不到时,计数完成。

    使用split方法,切割字符串,如果字符串最前端就有需切割的字符,那么会多存储一个空字符串,照成切割后,该字符串出现的次数+1

    4> 获取两个字符串中最大相同子串。

    第一个动作:将短的那个串进行长度一次递减的子串打印。

      "abcwerthelloyuiodef"

      "cvhellobnm"

      思路:

          1、将短的那个子串按照长度递减的方式获取到。

          2、将每获取到的子串去长串中判断是否包含,

              如果包含,已经找到!。

        

    转载请注明原文地址: https://ju.6miu.com/read-450353.html

    最新回复(0)