ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java常用类--String类(详解)

2021-01-27 20:02:04  阅读:120  来源: 互联网

标签:java String -- System 字符串 str println out


1.String介绍

String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现,字符串是常量;它们的值在创建之后不能更改。

2.创建字符串的几种常见形式

// 方式一

String str = “Hello Bit”;

// 方式二

String str2 = new String(“Hell Bit”);

//方式三

char[] arr={‘a’,‘b’,‘c’};

String str3=new String(arr);

注意事项:String也是引用类型其内存布局如下:

例1:String str=“Hello”;
在这里插入图片描述
例2:String str1=“Hello”; String str2=str1;
在这里插入图片描述
例3:String str1=new String(“Hello”); String str2=new String(“Hello”);
在这里插入图片描述
总结:方式一实例化字符串又称直接赋值法,其内存布局如例1的图,方式二实例化字符串又称构造方法,其内存布局如例3的图。方式三称为字符数组转成字符串,字符串的内部包含一个字符数组,所以它们是可以相互转换的。

3.String源码分析

/** String的属性值 */  
    private final char value[];

    /** The offset is the first index of the storage that is used. */
    /**数组被使用的开始位置**/
    private final int offset;

    /** The count is the number of characters in the String. */
    /**String中元素的个数**/
    private final int count;

    /** Cache the hash code for the string */
   /**String类型的hash值**/
    private int hash; // Default to 0

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -6849794470754667710L;
    /**
     * Class String is special cased within the Serialization Stream         Protocol.
     *
     * A String instance is written into an ObjectOutputStream according to
     * <a href="{@docRoot}/../platform/serialization/spec/output.html">
     * Object Serialization Specification, Section 6.2, "Stream Elements"</a>
     */

  private static final ObjectStreamField[] serialPersistentFields =
        new ObjectStreamField[0];

从源码看出String底层使用一个字符数组来维护的,成员变量可以知道String类的值是final类型的,不能被改变的,所以只要一个值改变就会生成一个新的String类型对象,存储String数据也不一定从数组的第0个元素开始的,而是从offset所指的元素开始。

4.字符串的常用方法

在这里插入图片描述
1.String的判断功能

public class TestString {
     public static void main(String[] args) {
        // 创建字符串对象
        String s1 = "hello";
        String s2 = "hello";
        String s3 = "Hello";

        // boolean equals(Object obj):比较字符串的内容是否相同
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
        //==比较的是地址的值,由于是字符串常量,所以值相等。
        System.out.println(s1==s2);
        System.out.println(s1.compareTo(s2));//字符串比较,如果内容相同就为0
        System.out.println("-----------");

        // boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
        System.out.println(s1.equalsIgnoreCase(s2));
        System.out.println(s1.equalsIgnoreCase(s3));
        System.out.println("-----------");

        // boolean startsWith(String str):判断字符串对象是否以指定的str开头
        System.out.println(s1.startsWith("he"));
        System.out.println(s1.startsWith("ll"));
    }

}

运行结果:
在这里插入图片描述

2.String类的获取功能

*常用方法:

  int length():获取字符串的长度,其实也就是字符个数
  char charAt(int index):获取指定索引处的字符
  int indexOf(String str):获取str在字符串对象中第一次出现的索引
  String substring(int start):从start开始截取字符串
  String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end

*代码测试:

public class TestString {
    public static void main(String[] args) {
          // 创建字符串对象
        String s = "helloworld";
 
        // int length():获取字符串的长度,其实也就是字符个数
        System.out.println(s.length());
        System.out.println("--------");
 
        // char charAt(int index):获取指定索引处的字符
        System.out.println(s.charAt(0));
        System.out.println(s.charAt(1));
        System.out.println("--------");
 
        // int indexOf(String str):获取str在字符串对象中第一次出现的索引
        System.out.println(s.indexOf("l"));
        System.out.println(s.indexOf("owo"));
        System.out.println(s.indexOf("ak"));
        System.out.println("--------");
 
        // String substring(int start):从start开始截取字符串
        System.out.println(s.substring(0));
        System.out.println(s.substring(5));
        System.out.println("--------");
 
        // String substring(int start,int end):从start开始,到end结束截取字符串
        System.out.println(s.substring(0, s.length()));
        System.out.println(s.substring(3, 8));
        
    }

}

运行结果:
在这里插入图片描述
3.String的转换功能

*常用方法

  char[] toCharArray():把字符串转换为字符数组
  String toLowerCase():把字符串转换为小写字符串
  String toUpperCase():把字符串转换为大写字符串

*代码测试

ublic class TestString {
    public static void main(String[] args) {
         // 创建字符串对象
        String s = "abcde";
 
        // char[] toCharArray():把字符串转换为字符数组
        char[] chs = s.toCharArray();
        for (int x = 0; x < chs.length; x++) {
            System.out.print(chs[x]+" ");
        }
         System.out.println();
        System.out.println("-----------");
 
        // String toLowerCase():把字符串转换为小写字符串
        System.out.println("HelloWorld".toLowerCase());
        // String toUpperCase():把字符串转换为大写字符串
        System.out.println("HelloWorld".toUpperCase());
        
    }

}

运行结果:
在这里插入图片描述

4.String类的字符串拆分(重要)

按照指定符号分割字符串:String[] split(String str)

*代码测试

public class TestNo1 {
        public static void main(String[] args) {
            String str = "hello world hello bit" ;
            String[] result = str.split(" ") ; // 按照空格拆分
            for(String s: result) {
                System.out.println(s);
            }
        }
    }

运行结果:
在这里插入图片描述

5. StringBruffer StringBuilder

任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已;通常来讲String的操作比较简单,但是由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和StringBuilder;StringBuffer 和 StringBuilder 大部分功能是相同的。

*代码案例如下:

public class TestNo1 {
        public static void main(String[] args) {
           StringBuffer str=new StringBuffer("hello");
            String str1= str.append("world").toString();//StringBuffer转成字符串
            String s="nihao";
            StringBuffer stringBuffer=new StringBuffer(s); //字符串转成StringBuffer
            stringBuffer.append("world"); //字符串转成StringBuffer
            System.out.println(stringBuffer);
            System.out.println(str1);
            System.out.println(str.reverse());//字符串反转
            System.out.println(str.delete(0,2));//删除指定的字符长度
            System.out.println(str.insert(0,'A'));//在指定的字符串插入的位置插入数据

        }
    }

运行结果:
在这里插入图片描述
总结:

1.String类和StringBuffer类不能直接转换,要转换采取以下原则:

1)String类变成StringBuffer:利用StringBuffer的构造方法或者append()方法

2)String Buffer变成String类:调用toString()方法。

2.String类与StringBuffer类,StringBuilde类的区别:

1)String的内容不可修改,StringBuffer与StringBuilder的内容可以修改。

2)StringBuffer与StringBuilder的大部分功能是相似的。

3)StringBuffer采用异步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作。

标签:java,String,--,System,字符串,str,println,out
来源: https://blog.csdn.net/m0_54798309/article/details/113267159

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有