zoukankan      html  css  js  c++  java
  • Java —— String

    概述

    1.  Java程序中,所有的双引号字符串,都是String这个类的对象。
    2. String类在Java.lang包下,所以使用的时候是不需要导包的。
    3. 字符串不可变,它们的值在创建之后不可被更改。

    常见的构造方法

    public String()   // 创建一个空白字符串对象,不含有任何内容
    
    public String(char[] chs)   // 根据字符数组的内容,来创建字符串对象
    
    public String(String original)   // 根据传入字符串的内容,来创建字符串对象
    
    String s = "abc"   // 直接赋值的方法来创建字符串对象,内容就是abc
    

    常见的成员方法 

    length()

    获取字符串的长度,常用于遍历字符串。

    String str = "hello world";
    System.out.println("str.length() = " + str.length());   // str.length() = 11
    

     

    charAt()

    返回指定索引处的char值,字符串的索引也是从0开始的,常用于遍历字符串。使用方式如下

    String str = "hello world";
    System.out.println(str.charAt(1));   // e
    

      

    toCharArray()

    将当前字符串拆分为字符数组并返回,常用于遍历字符串。使用方式如下

    String str = "hello world";
    char[] chars = str.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        System.out.print(chars[i] + "	");   // h	e	l	l	o	 	w	o	r	l	d
    }
    

      

    substring()

    字符串的截取,它有俩种使用方式,分别是传入一个参数和俩个参数,使用方式分别如下:

    1、传入一个参数,就是从传入的索引处开始向后截取,一直截取到末尾,得到新的字符串并返回。

    String str = "hello world";
    String newStr2 = str.substring(6);
    System.out.println(newStr2);   // world
    

    2、传入俩个参数,第一个参数就代表开始截取的位置索引,第二个参数代表结束索引的位置。使用方式如下:

    String str = "hello world";
    String str2 = str.substring(1, 4);
    System.out.println(str2);   // ell 

    replace

    将当前字符串中的部分内容使用新值进行替换,返回替换完成后的新字符串。它传入2个参数,第一个参数为即将要替换的内容,第二个参数为即将使用的字符串新值,使用方式如下

    String str = "hello world";
    String newString = str.replace("hello", "hi");
    System.out.println(newString);   // hi world
    

    这个方法是全部替换,也就是字符串中有多个所匹配的,也一并替换掉,如下

    String str = "hello world, hello world";
    String newString = str.replace("hello", "hi");
    System.out.println(newString);   // hi world, hi world
    

    split

    根据传入的字符串作为规则进行切割,将切割后的内容存入字符串数组中,并将字符串数组返回。使用方式如下

    String str = "张三, 27";
    String[] arr = str.split(",");
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);   // 张三
                                      // 27
    }
    

      

    equals()和equalsIgnoreCase()

    ==号在做比较的时候,如果是基本数据类型之间的比较,比较的是具体的值,比较引用类型的值的时候,比较的是地址值。

    因为字符串是对象,如果需要它比较内容是否相同。可以通过一个方法来实现,这个方式就是——equals,使用方式如下:

    String str1 = "abc";
    String str2 = new String("abc");
    boolean result = str1.equals(str2);
    System.out.println(str1 == str2);   // false
    System.out.println(result);   // true
    

    如果想忽略大小写的进行比较,可以使用equalsIgnoreCase()进行比较,使用方法如下:

    String str1 = "abc";
    String str2 = new String("ABC");
    boolean result = str1.equalsIgnoreCase(str2);
    System.out.println(result);   // true
    

      

    一些注意点

    创建字符串对象的区别对比

    以" "方式给出的字符串,只要字符序列(顺序和大小写)相同,无论在程序代码中出现几次,JVM都只会创建一个String对象,并在字符串常量池中维护。

    String str1 = "abc";
    String str2 = "abc";
    

    当使用" "创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在,如果不存在,就创建,如果存在,就不会重现创建,而是直接复用。

    通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同。

    String str3 = new String("abc");
    String str4 = new String("abc");

    关于不能更改

    字符串是常量,它们的值在创建之后不能更改。

    String str = "abc";
    str = "def";
    System.out.println("str = " + str);   // str = def
    

    上面str字符串对象看似内容被更改了,其实并没有,只是str变量指向了另一个字符串对象实例。

    关于打印

    string这个类比较特殊,打印其对象名的时候,不会出现内存地址,而是该对象所记录的真实内容。

    常见面试题

    String str1 = "abc";
    String str2 = "abc";
    System.out.println(str1 == str2);   // true
    String str1 = "abc";
    String str2 = new String("abc");
    System.out.println(str1 == str2);   // false
    

     

    String str1 = "abc";
    String str2 = "ab";
    String str3 = str2 + "c";
    System.out.println(str1 == str3);   // false
    
    // 分析:当字符串之间使用 + 号串联(拼接)的时候,系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成拼接。拼接后,再调用其toString方法转换为String类型。
    String str1 = "abc";
    String str2 = "a" + "b" + "c";
    System.out.println(str1 == str2);   // true
    
    // 分析:Java存在常量优先机制,在编译的时候,就会将"a" + "b" + "c"拼接为"abc"
    

      

      

      

      

  • 相关阅读:
    使用浏览器的 Local Storage 真的安全吗?
    传统到敏捷的转型中,谁更适合做Scrum Master?
    HBM2E Flashbolt--提升人工智能的算力
    C语言 for 循环
    C语言自加自减运算符(++i / i++)
    C语言逗号表达式
    C语言逻辑运算符
    C语言三目运算符
    C语言条件判断 if / else
    C语言 printf 函数
  • 原文地址:https://www.cnblogs.com/xulinjun/p/14699517.html
Copyright © 2011-2022 走看看