zoukankan      html  css  js  c++  java
  • 第12章 Java字符串

     

    1.什么是Java中的字符串

    字符串String并不是一种数据类型,而是一个类对象,在java.lang包中,只不过在默认情况下java都是自动导入的,所以可以直接使用
    创建一个String对象的方法有两种
    1.直接给变量赋值一个字符串,常用的一种方式

    String s1 = “immoc”;//字符串用双引号,单引号的是char

    2.另一种方式是通过new String()方法

    String s2 = new String();//创建一个空字符串对象
    String s3 = new String(“Welcome”);

    2.字符串的不变性

    String对象创建之是不能够修改的,所有的修改在本质上都是创建了一个新的对象而已
    先看一个例子:

    String s1 = "hello";
    String s2 = "hello";
    String s3 = new String("hello");
    String s4 = new String("hello");
    
    System.out.println(s1==s2);//true
    System.out.println(s1==s3);//false
    System.out.println(s3==s4);//false
    s1 = "rocco: "+s1;
    System.out.println(s1);//cenyu:hello

    解释一下:
    1.通过String s1=”hello”;这种方法创建一个s1字符串,此时,局部变量s1是保存在栈中,String是一个引用数据类型,所以s1保存的实际是常量hello所在的内存地址。而hello是存放在堆内存中。
    2.s1和s2都是引用类型,且引用的值是相同的,这个值引用已经保存在堆内存中的hello,即两个变量引用的是同一个位置的值,所以用s1==s2可以得出true
    3.s3和s4的方式是通过创建一个对象来赋值,此时s3和s4是两个不同的对象,值也就放在不同的对象中,所以这两个也是不想同的。
    4.最后当s1 = “rocco: “+s1;并不是再hello的位置上进行修改hello,而是把”hello”+s1的值重新放在一个位置,然后用s1重新引用这个值,原来的hello并不会影响

    3.String类的常用方法

    常用方法如下:

    代码:

     1 import java.util.Arrays;
     2 
     3 /**
     4  * 
     5  * 测试String的方法
     6  */
     7 public class TestString {
     8     public static void main(String[] args) {
     9         String str = "abcdefaa";
    10         //str.length()返回当前字符串的长度
    11         System.out.println(str.length());  //8
    12         //str,indexOf("bc"),返回b开始的索引
    13         System.out.println(str.indexOf("bc"));//1
    14         //返回在字符串中最后一次出现的索引位置
    15         System.out.println(str.lastIndexOf("a"));//7
    16         //返回从索引位置从3开始到最后的字符串
    17         System.out.println(str.substring(3));//defaa
    18         //返回从索引3开始到5结束的字符串
    19         System.out.println(str.substring(3,5));//de
    20         //清空字符串前后空格,返回
    21         System.out.println("  aa  ".trim());//aa
    22         //将字符与指定对象比较,返回false或true
    23         System.out.println(str.equals("aa"));//false
    24         //将字符串转为小写
    25         System.out.println("ABCDEF".toLowerCase());//abcedf
    26         //将字符串转为大写
    27         System.out.println("abcdef".toUpperCase());//ABCDEF
    28         //取字符串指定位置的字符
    29         System.out.println(str.charAt(0));//a
    30         //按照给定的方法分割成数组,后一个参数是第几个结束,第6个下标是5
    31         System.out.println(Arrays.toString(str.split("",6)));//[a, b, c, d, e, faa]
    32 
    33     }
    34 }

    ==equals()的区别
    ==:判断两个字符串在内存中的地址是否相同,即判断是否是同一个字符串对象
    equals:比较存储在两个字符串对象中的内同是否一致,即值的是否相等

    4.Java中的StringBuilder类

    原本String是不可改变的一个对象,所以java提供了两个子类来操作String来操作对象。是StringBuffer和Stringbuilder这两个类。下面我们比较一个这两个类
    StringBuffer:提供线程安全,效率低
    StringBuilder:不提供线程安全,效率高
    这两个类提供的方法一样,所以我们通常是使用效率较高的StringBuilder类
    StringBuilder提供的方法:
    1.初始化一个字符串对象

    StringBuilder str = new StringBuilder()

    2.追加方法,追加内容到当前对象的末尾

    StringBuilder append(参数)
    3.插入方法,将内容插入到对象的指定位置
    StringBuilder insert(位置,参数)
    4.将StringBuilder转化为String对象
    String toString()
    5.获取字符串的长度
    int length()

     1 /**
     2  * 测试StringBuiler类方法
     3  */
     4 public class TestStringBuilder {
     5     public static void main(String[] args) {
     6         //初始化一个空值
     7         StringBuilder str = new StringBuilder();
     8         //初始化一个普通字符串
     9         StringBuilder str1 = new StringBuilder("Hello,");
    10         System.out.println(str1);//Hello,
    11         //追加方法
    12         str1.append("World!");
    13         System.out.println(str1);//Hello,World!
    14         //插入方法
    15         str1.insert(3,"ABC"); 
    16         System.out.println(str1);//HelABClo,World!
    17 
    18         String str2 = str1.toString();
    19     }
    20 }

    需要注意的是,这里的方法都是在原地址修改,修改之后再引用就是修改之后的值。
    改变之后再使用toSting方法转换成String类型

  • 相关阅读:
    [c++ 11x rvalue reference]
    Exception Cost
    How to set NoStepInto for VS debugging
    STL算法find_if和find
    [转载]The Biggest Changes in C++11 (and Why You Should Care)
    QT信号和槽
    读《构建之法》前三章有感
    复利计算器(3)——数据库
    《构建之法》——第四章
    操作系统命令行解释
  • 原文地址:https://www.cnblogs.com/cenyu/p/6093498.html
Copyright © 2011-2022 走看看