zoukankan      html  css  js  c++  java
  • String类的学习

    本节内容总结来自传智播客毕向东老师的公开课,感谢毕向东老师 !如有错误之处,欢迎大家指教 !

     

    String s = “abc”;  // “abc”是一个对象;

    只要是字符串,都是String类的实例对象;

     

    String s = “abc”;

    String s = new String(“abc”);

    两者效果是一样的,但常用第一种写法;

     

    字符串既是对象,也是常量,一旦被初始化就不会再改变;

    String s1 = “wsx”;

    s1 = “edc”;

    System.out.println(s1);  // 结果是 edc

    “wsx”并没有变,变的是s1,指向了新的对象;”wsx”对象内容没变,只是s1中保存的对象地址变了;

     

    String类常用的方法:

    获取:

      获取字符串长度: int length();

      根据位置获取位置上的字符: char charAt(int index);

      从指定位置开始,获取字符在字符串中第一次出现的位置: int indexOf(int ch);  int indexOf(int ch, int fromIndex);

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

      上述两条的反向获取:上面两条是从头往后找,下面两条是从后往前找

        int lastIndexOf(int ch);  int lastIndexOf(int ch, int fromIndex);

        int lastIndexOf(String str);  int lastIndexOf(String str, int fromIndex);

      获取字符串中的一部分: String subString(begin);  String subString(begin, end);

    判断:

      字符串中是否包含某个字串(字符): boolean contains(String str);  boolean contains(char ch);

      字符串中是否有内容: boolean isEmpty();

      字符串是否以指定内容开头: boolean startsWith(String str);  boolean startsWith(char ch);

      字符串是否以指定内容结尾: boolean endsWith(String str);  boolean endsWith(char ch);

      判断字符串内容是否相同: boolean equals();

      判断字符串内容是否相同,并忽略大小写: boolean equalsIgnoreCase();

    转换:

      将字符数组(或部分字符数组)转成字符串:new String(char[]);  new String(char[], offset, count);

      将字符串转成字符数组: char[] toCharArray();

      将字节数组转成字符串: new String(byte[]);  new String(byte[], offset, count);

      将字符串转成字节数组: byte[] getBytes();

      将基本类型转成字符串: 3 + “”;  String.valueOf(3);

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

    替换:

      替换一个字符: replcae(char oldChar, char newChar);

      替换字符串: replace(CharSequence target, CharSequence replacement);  // CharSequence是接口,就把它理解成String来用

    切割:

      String[] split(regex);

    转换,去除空格,比较:

      转换成大写,小写: String toUpperCase();  String toLowerCase();

      去除字符串前后空格: String trim();

      对两个字符串进行自然顺序的比较: int compareTo(String str);

    StringBuffer:线程安全的可变字符序列

    线程同步;

    字符串缓冲区;

    是一个容器,可以对字符串进行修改;

    三个特点:

      长度是可变化的;

      可以直接添加多种数据类型;

      最后通过toString()方法转成字符串;

    常用方法:

      存储:

      在数据末尾处添加:StringBuffer appnd();  // 形参可以是基本数据类型,String类,StringBuffer类,也可以是对象

      在任意位置插入:StringBuffer insert(index, 数据);

      删除:

      删除缓冲区中部分数据:StringBuffer delete(int start, int end);

      删除指定位置数据:StringBuffer delete(int index);

      修改:

      修改部分内容:StringBuffer replace(int start, int end, String str);

      修改某一个字符:void setCharAt(int index, char ch);

      获取:

      获取指定位置字符:char charAt(int index);

      获取字符/字符串所在位置:int indexOf(String str);

      反向获取字符、字符串所在位置:int lastIndexOf(String str);

      获取长度:int length();

      获取容器中某一部分的数据:String subString(int start, int end);

      反转:

        StringBuffer reverse();

      将缓冲区中指定数据存储到指定数组中:

        // 先定义一个字符数组:char[] ch = new char[4];

        void getChars(int srcBegin, int srcEnd, char[] char, int charBegin);  // charBegin:数组的起始位置

    StringBuilder:线程不安全的可变字符序列

    线程不同步;

    除了线程不安全,其他都可以取代StringBuffer

    多线程用StringBuffer,单线程用StringBuilder

    基本数据类型对应的对象包装类:

      int      Integer

      char    Character

      boolean  Boolean

      short    Short

      byte     Byte

      long     Long

      float     Float

      double   Double

    最常用的功能:就是基本数据类型与字符串之间的转换

       基本数据类型转字符串:

       基本数据类型 + “”;

       包装类.toString(基本数据类型值);   举例Integer.toString(34);

       字符串转基本数据类型:

           xxx a = Xxx.parseXxx(String str);

       整型为例:Integer.parseInt(String str);

    JDK1.5新特性:自动装箱拆箱

      自动装箱:

        以前写法:Integer i = new Integer(6);

        现在写法:Integer i = 6;

      自动拆箱:

        i = i + 3;  // i自动拆箱变成int型,和int型的3相加之后,再自动装箱变成Integer

      还有一个小特性:

        // byte范围外的数据

        Integer a = 128;

        Integer b = 128;

        System.out.println(a == b);  // 结果为false

        // byte范围内的数据

        Integer a = 127;

        Integer b = 127;

        System.out.println(a == b);  // 结果应该为false,但结果为true

      解释:ab指向了同一个Integer对象,因为当数值在byte范围之内,对于新特性,如果该数值已存在,则不会再开辟新空间;

    一些实例:

     1 /**
     2  * 功能:String类对象解析
     3  */
     4 
     5 package string;
     6 
     7 public class String1
     8 {
     9     public static void main(String[] args)
    10     {
    11 // s1在内存中有一个对象
    12         String s1 = "abc";
    13 // s2在内存中有两个对象
    14         String s2 = new String("abc");
    15                 
    16         // s1和s2是两个独立的对象,地址不一样
    17         // == 比较的是地址,所以结果为false
    18         System.out.println(s1==s2);
    19         
    20         // String类重写的继承自Object类的equals()方法
    21         // 只比较字符串的内容是否相等,所以返回true
    22         System.out.println(s1.equals(s2));
    23         
    24         String s3 = "abc";
    25         // 指向同一个对象,返回true
    26         // 因为在内存的常量池中已经存在
    27         System.out.println(s1==s3);
    28         
    29         String s4 = new String("abc");
    30         // 两个对象,返回false
    31         System.out.println(s2==s4);
    32     }
    33 }
    String类对象解析
     1 /**
     2  * 功能:字符串特性
     3  */
     4 package string;
     5 
     6 public class String2
     7 {
     8     public static void main(String[] args)
     9     {
    10         test();
    11     }
    12     
    13     public static void test()
    14     {
    15         // 一旦被初始化,就不会再改变
    16         String s = "hello, java";
    17         // 产生新的字符串,原来的字符串不变
    18         String s1 = s.replace("a", "n");
    19         
    20         // 打印出来结果内容不变
    21         System.out.println("s:" + s);
    22         System.out.println("s1:" + s1);
    23     }
    24 }
    字符串特性
     1 /**
     2  * 功能:将字符串反转
     3  */
     4 package string;
     5 
     6 public class String3
     7 {
     8     public static void main(String[] args)
     9     {
    10         String str = "asdfghj";
    11         
    12         // 将字串串转成字符数组
    13         char[] charStr = str.toCharArray();
    14         
    15         // 对字符数组内容进行反转
    16         char[] charStr2 = reverse(charStr);
    17         
    18         // 将字符数组转成字符串
    19         getStr(charStr2);
    20     }
    21     
    22     public static char[] reverse(char[] charStr)
    23     {
    24         for(int start=0,end=charStr.length-1; start <= end; start++, end--)
    25         {
    26             swap(charStr, start, end);
    27         }
    28         
    29         return charStr;
    30     }
    31     
    32     public static void swap(char[] charStr, int start, int end)
    33     {
    34         char temp = charStr[start];
    35         charStr[start] = charStr[end];
    36         charStr[end] = temp;
    37     }
    38     
    39     public static void getStr(char[] charStr2)
    40     {
    41         String str = new String(charStr2);
    42         System.out.println("str:" + str);
    43     }
    44 }
    将字符串反转
     1 /**
     2  * 功能:StringBuffer特性
     3  */
     4 package string;
     5 
     6 public class StringBuffer1
     7 {
     8     public static void main(String[] args)
     9     {
    10         StringBuffer sb1 = new StringBuffer();
    11         StringBuffer sb2 = sb1.append("123");
    12         
    13         // 结果返回true,说明是同一个对象
    14         System.out.println(sb1 == sb2);
    15         
    16         // 内容都一样
    17         System.out.println(sb1.toString());
    18         System.out.println(sb2.toString());
    19         
    20         // 说明:
    21         // StringBuffer是一个容器,不管你是往里面添加东西还是
    22         // 删除东西,都是在同一个容器中操作,所以定义的多个容器对象
    23         // 都直向给同一个对象,所以可简化上面操作
    24         sb2.append("456").append("789").append(true);
    25         // 结果显示两个对象还是相等的
    26         System.out.println(sb2.toString());
    27         System.out.println(sb1.toString());
    28     }
    29 }
    StringBuffer特性
  • 相关阅读:
    html框内文字垂直居中的方法
    关于 TensorFlow
    用windows自带的ftp.exe实现断点续传的方法
    Bat脚本处理ftp超强案例解说
    用winrar和ftp命令实现自动备份文件并自动上传到指定的ftp服务器
    在ubuntu上利用科大讯飞的SDK实现语音识别-语义识别等功能
    Linux音频编程--使用ALSA库播放wav文件
    使用iconv进行文件编码转换
    嵌入式Linux-LCD显示多行文字
    使用freetype来显示中文汉字和英文字符
  • 原文地址:https://www.cnblogs.com/kehuaihan/p/6720864.html
Copyright © 2011-2022 走看看