Java(4)String类

Java String类

String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了

如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类

String字符串的操作

创建字符串

  1. 通过双引号“”创建。

    String greeting = "菜鸟教程";
    //String是一个引用类型,本质是一个类class,但是因为String太常用了,Java提供了这种方法。
    
  2. 通过new关键字创建

    String s=new String("abc");
    
  3. 通过构造方法创建

    char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'}; 
    String helloString = new String(helloArray);
    

字符串长度

String 类的一个访问器方法 是 length() 方法,它返回字符串对象包含的字符数。

用于获取有关对象的信息的方法称为访问器方法

    String s= new String()

    s.length()

连接字符串

  • 使用String类concat方法或者+号
System.out.println("hello".concat(" world"));

System.out.println("hello"+" world");

//结果都是hello world
  • 使用String类join()方法,通过某种连接符连接字符串。
public class Test01{
    public static void main(String[] args) {
        String[] a={"I", "love you","krystal"}; //创建字符串类型的数组
        String krystal=String.join("***",a);
        System.out.println(krystal);
    }
}
//运行结果为:I***love you***krystal

分割字符串

String类提供了split()方法:依据某个分割符分割字符串。split()方法的参数是正则表达式。

public class Test01{
    public static void main(String[] args) {
        String a="kobe*this*is*for*you";
        String [] b=a.split("\\*"); //这里要注意,第一个\是转义字符,\*是正则表达式
        for(String i:b){  //循环遍历b
            System.out.println(i);
        }
    }
}
/*运行结果为:
kobe
this
is
for
you
*/

替换字符串子串

使用String类提供的replace()方法,方法参数可以是正则表达式。

public class Test01{
    public static void main(String[] args) {
        String a="I hate you!";
        System.out.println(a.replace("hate","love"));//参数可以为正则表达式
    }
}
//运行结果为:I love you!

格式化字符串

使用printf()或者format()方法

float floatVar=1.0f;
int intVar=3;
String stringVar="Hello";
String fs;

 //printf()方法:
System.out.printf("浮点型变量的值为 " +
         "%f, 整型变量的值为 " +
         " %d, 字符串变量的值为 " +
         "is %s", floatVar, intVar, stringVar);

//format()方法:
/*注意:format()并不能打印字符串出来,需要另外输出语句,因为format() 返回一个String 对象而不是 PrintStream 对象*/
fs = String.format("浮点型变量的值为 " +
           "%f, 整型变量的值为 " +
           " %d, 字符串变量的值为 " +
           " %s", floatVar, intVar, stringVar);

System.out.print(fs);

去除字符串首尾空白字符

  • 使用String类的trim()方法可以移除字符串首尾的英文空白字符,空白字符包括:\n,\r,\t
public class Test01{
    public static void main(String[] args) {
        String a="  I love you, Krystal!   ";
        System.out.println(a);
        System.out.println(a.trim()); //注意:trim()并没有改变字符串a,而是返回了新字符串
    }
}
/*运行结果如下,可以看到第二行输出被去除了空白字符
  I love you, Krystal!   
I love you, Krystal!
*/
  • String类提供了isEmpty()方法来判断字符串是否为空(有空白字符就算字符串不为空)
public class Test01{
    public static void main(String[] args) {
        String a="  Kobe I love you  ";
        System.out.println(a.isEmpty()); //false
        System.out.println("      ".isEmpty()); //false
        System.out.println("".isEmpty()); //true
    }
}

String类支持的其它方法

Java StringBuffer 和 StringBuilder 类

和 String 类(不可变数据类型)不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。(即为可变数据类型)

例如:Java对String进行了特殊处理,可使用+连接字符串,但是利用+连接字符串的同时,会不断产生新的String类型对象。

public class Test01{
    public static void main(String[] args) {
        String a="";
        for (int i = 0; i < 3; i++) {
        }
    }
}

为了高效拼接字符串,Java提供了StringBuilder和StringBuffer类,它们是可变类型,可以预分配缓冲区,这两种类型字符串新增字符时,不会创建新的临时对象。

这两种类型字符串不支持+号,但支持链式操作,如下:

public class Test01{
    public static void main(String[] args) {
        StringBuilder a=new StringBuilder();
        a=a.append("I").append(" love you").insert(0,"Kobe, ");
        System.out.println(a);

        StringBuffer b=new StringBuffer();
        b=b.append("I").append(" love you").insert(0,"Krystal, ");
        System.out.println(b);
    }
}
/*运行结果为:
Kobe, I love you
Krystal, I love you
*/

从上面可以知道,要高效拼接字符串,应该使用StringBuilder,如:

package day01;

/**
 * 利用字符串数组{"Kobe","James","kevin","love","Jordan"},
 *  拼接成 Hello,Kobe, James, kevin, love, Jordan!
 */
public class Test01{
    public static void main(String[] args) {
        StringBuilder s=new StringBuilder();
        String [] arrStr={"Kobe","James","kevin","love","Jordan"};
        s.append("Hello,");
        for (String i:arrStr){ //循环拼接
            s.append(i).append(", ");
        }
        s.delete(s.length()-2,s.length()-1); //去掉尾部的逗号和空格 ", "
        s.append("!");
        System.out.println(s);
    }
}
//运行结果为:Hello,Kobe, James, kevin, love, Jordan!

//------------Java还提供了StringJoiner类,该类可以指定拼接符和首尾符号来拼接字符串----------
package day01;

import java.util.StringJoiner;

public class Test01{
    public static void main(String[] args) {
        StringJoiner s=new StringJoiner(",","Hello,","!"); 
        //第一个参数是拼接符,第二个参数是字符串开头添加的内容,第三个参数是字符串结尾添加的内容
        System.out.println(s);
        String [] arrStr={"Kobe","James","kevin","love","Jordan"};
        for(String i:arrStr){
            s.add(i);
        }
        System.out.println(s);
    }
}
/*运行结果为:
Hello,!
HelloKobe,James,kevin,love,Jordan
 */

StringBuilder和StringBuffer的区别:**

StringBuilder:有速度优势

StringBuffer 类:线程安全

posted @ 2020-08-28 00:10  Whatever_It_Takes  阅读(140)  评论(0编辑  收藏  举报