• java-14常用类-02=Java中的String类


    Java中定义了String和StringBuffer两个类来封装对字符串的各种操作,存放于java.lang包中,无需导入即可直接使用它们。

    一、String对象的创建及初始化。

    1.使用字符串常量直接初始化:

    String s1 = "Hello world!";

    这样的字符串严格来讲都是String类的匿名对象,对象名称s1保存在栈内存中,而字符串“Hello world!”保存在堆内存中。

    通过引用传递创建字符串对象s2:

    String s2 = s1;

    在第一次定义字符串的时候,在堆内存中开辟一块空间,如果之后使用直接赋值或者引用传递创建新的对象,且此内容已经存在,就不会开辟新的堆内存,而让其指向了已有的字符串内容。

    2.使用构造方法初始化:

    String s3 = new String("Hello world!");

    这种方法会开辟第二块堆内存空间,其中一块将会成为垃圾,无法实现自动入池操作。

    在String类中提供了手工入池的方法:public String intern();

    String s3 = new String("Hello world!").intern();

    3.使用串联方式:

    String s4 = "Hello"+" world!";

    二、String内容的比较。

    1.调用equals()方法:

    String s = "Hello world!";
    Boolean result = s.equals("Hello world!");

    这个方法在之前已经提到过了,equals()比较字符串的内容,它会区分字符串的大小写,也有一种忽略大小写的方法:public boolean equalsIgnorecase();。

    2.使用比较运算符“==”:

    1 String s1 = "Hello world!";
    2 String s2 = "Hello world!";
    3 String s3 = new String("Hello world!");
    4 Boolean result1 = (s1==s2);//true
    5 Boolean result2 = (s1==s3);//false

    可以看出,“==”完成的是两个对象堆内存地址的判断,比较两个对象是否引用同一个实例,而不是真正意义上字符串内容的比较。

    三、字符串一旦声明则不可改变。

    String s = "Hello";
    s = s + " world";
    s = s + "!";
    System.out.println(s);//Hello world!

    从输出结果来看,字符串的内容被改变了,但实际上只是String类对象的引用改变了,开辟出额外的堆内存空间,造成大量字符串垃圾。

    所以,在编程过程中应尽量避免多次修改字符串内容,以免出现大量的垃圾。

    ***Java中使用StringBuffer类或者StringBuilder类来改变字符串内容,且不会创建新的对象。

    1 StringBuffer s = new StringBuffer("Hello");
    2 s.append(" world!");//在结尾追加内容
    3 s.insert(6, "new ");//在指定位置插入内容
    4 System.out.println(s);//Hello new world!

    四、String类的常用方法。

    在Java中,String类中定义了大量的操作方法,下面列出了常用的部分方法:

    其他不再详细叙述了,仅用一个例子来大体概括它们的使用:

    其他不再详细叙述了,仅用一个例子来大体概括它们的使用:

    复制代码
     1 class Demo
     2 {
     3     String s = "Hello world!";
     4     public void chartest()
     5     {
     6         System.out.println("取出第5个字符:"+s.charAt(4));//取出字符串中第5个字符
     7     }
     8     public void Arraytest()
     9     {
    10         //字符串与字符数组相互转化
    11         char data[] = s.toCharArray();//将字符串变为字符数组
    12         for(int i=0;i<data.length;i++)
    13         {
    14             System.out.print(data[i]+"、");
    15         }
    16         System.out.println();
    17         System.out.println(new String(data));//将字符数组变为字符串
    18         System.out.println(new String(data,6,5));//从下标为6,即第7个字符开始取5个字符
    19     }
    20     public void intexOftest()
    21     {
    22         //查找指定子字符串的位置
    23         System.out.println("找到,该字符串位置:"+s.indexOf("w"));//从前向后查找
    24         System.out.println("找到,该字符串位置:"+s.indexOf("w",4));//从指定位置开始查找
    25     }
    26     public void containstest()
    27     {
    28         //判断某字符是否存在
    29         System.out.println(s.contains("d")?"该字符存在":"该字符不存在");
    30     }
    31     public void replacetest()
    32     {
    33         //字符串替换
    34         System.out.println(s.replaceAll("l", "a"));//全部替换
    35         System.out.println(s.replaceFirst("l", "a"));//替换首个
    36     }
    37     public void substringtest()
    38     {
    39         //字符串截取
    40         System.out.println(s.substring(6));//截取指定位置到末尾
    41         System.out.println(s.substring(0, 5)+"和"+s.substring(6,11));//截取指定范围
    42     }
    43     public void splittest()
    44     {
    45         //字符串拆分
    46         String data[] = s.split("o");//按指定字符全拆分
    47         for(String i:data)
    48         {
    49             System.out.println(i);
    50         }
    51         String data1[] = s.split("l", 4);//拆分为指定元素个数的字符数组
    52         for(String j:data1)
    53         {
    54             System.out.println(j);
    55         }
    56     }
    57     public void Casetest()
    58     {
    59         //大小写转换
    60         System.out.println(s.toLowerCase());//小写
    61         System.out.println(s.toUpperCase());//大写
    62     }
    63 }
    64 public class Text{
    65     public static void main(String[] args)
    66     {    
    67         Demo dm = new Demo();
    68         dm.chartest();
    69         dm.Arraytest();
    70         dm.intexOftest();
    71         dm.containstest();
    72         dm.replacetest();
    73         dm.substringtest();
    74         dm.splittest();
    75         dm.Casetest();
    76     }
    77 }
    复制代码
    看似简单的知识背后,承载的是收获和成长!
  • 相关阅读:
    基于OpenCV的图像强度操作
    统计学习方法笔记(一)-k近邻算法原理及python实现
    机器学习实战-之SVM核函数与案例
    机器学习实战之SVM原理与案例
    JStorm与Storm源码分析(七)--BasicBoltExecutor与装饰模式
    JStorm与Storm源码分析(五)--SpoutOutputCollector与代理模式
    JStorm与Storm源码分析(四)--均衡调度器,EvenScheduler
    JStorm与Storm源码分析(三)--Scheduler,调度器
    JStorm与Storm源码分析(二)--任务分配,assignment
    转。Nas配置。想找原版没找到,全是转载的,也没注出处,无语。
  • 原文地址:https://www.cnblogs.com/tangsong41/p/14421265.html
Copyright © 2020-2023  润新知