java基础总结18-java常用API(String类)

1 String类

String类概述:字符串是由多个字符组成的一串数据(字符序列),字符串可以看成是字符数组,字符串是常量;它们的值在创建之后不能更改。

1.1 String类的构造方法

构造方法:

  • public String():

初始化一个新创建的 String 对象,使其表示一个空字符序列。注意,由于 String 是不可变的,所以无需使用此构造方法

  • public String(byte[] bytes):

通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String

  • public String(byte[] bytes,int offset,int length):

通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String

  • public String(char[] value):

分配一个新的 String,使其表示字符数组参数中当前包含的字符序列

  • public String(char[] value,int offset,int count):

分配一个新的 String,它包含取自字符数组参数一个子数组的字符

  • public String(String original):

初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本

例子:

//空构造
String s1 = new String();
System.out.println("s1"+s1);//s1
//将字节数组转成字符串
byte[] bys = {97,98,99,100,101};
String s2 = new String(bys);
System.out.println("s2:"+s2);//s2:abcde
//输出字符串的长度
System.out.println(s2.length());//5
//将字节数组的一部分转成字符串
String s3 = new String(bys,1,3);
System.out.println("s3:"+s3);//s3:bcd
//将字符数组转成字符串
char[] ch = {'a','b','c','d','e','我'};
String s4 = new String(ch);
System.out.println("s4:"+s4);//s4:abcde我
//将字符数组的一部分转成字符串
String s5 = new String(ch,2,4);
System.out.println("s5:"+s5);//s5:cde我

1.2 String的特点

String的特点:一旦被赋值就不能改变

String s = “hello”; s += “world”; s的结果是多少?

String s = “hello”; 在方法区的字符串常量池中创建hello

s += “world”;在方法区的字符串常量池中创建world ,再创建空间拼接helloworld

s的结果为helloworld

1.2 String字面值对象和构造方法创建对象的区别

String s = new String(“hello”) 和 String s = “hello”;的区别?

有区别,String s = new String(“hello”);分别在堆内存与方法区创建2个对象
String s = “hello”;只在方法区创建1个对象

1.3 String面试题看程序写结果

题1:

public class Practice 
{
    public static void main(String[] args)
    {
        String s1 = new String("hello");
        String s2 = new String("hello");
        System.out.println(s1==s2);//false
        System.out.println(s1.equals(s2));//true

        String s3 = new String("hello");
        String s4 = "hello";
        System.out.println(s3==s4);//false
        System.out.println(s3.equals(s4));//true

        String s5 = "hello";
        String s6 = "hello";
        System.out.println(s5==s6);//true
        System.out.println(s5.equals(s6));//true
    }
}

题2:

public class Practice 
{
    public static void main(String[] args)
    {
        //字符串如果是变量相加,先开空间,再拼接。
        //字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。
        String s1 = "hello";
        String s2 = "world";
        String s3 = "helloworld";
        System.out.println(s3 == s1 + s2);//false
        System.out.println(s3.equals(s1 + s2));//true
        System.out.println(s3 == "hello" + "world");//true
        System.out.println(s3.equals("hello" + "world"));//true
    }
}

1.4 String类的判断功能

  • public boolean equals(Object anObject):

将此字符串与指定的对象比较

  • public boolean equalsIgnoreCase(String anotherString):

将此 String 与另一个 String 比较,不考虑大小写

  • public boolean contains(CharSequence s):

当且仅当此字符串包含指定的 char 值序列时,返回 true

  • public boolean startsWith(String prefix):

测试此字符串是否以指定的前缀开始

  • public boolean endsWith(String suffix):

测试此字符串是否以指定的后缀结束

  • public boolean isEmpty():

当且仅当 length()为0时返回 true

例:

public class Practice 
{
    public static void main(String[] args)
    {
        //创建字符串对象
        String s1 = "helloworld";
        String s2 = "Helloworld";
        System.out.println("equals:"+s1.equals(s2));
        System.out.println("equalsIgnoreCase:"+s1.equalsIgnoreCase(s2));
        System.out.println("contains:"+s1.contains("hello"));
        System.out.println("startsWith:"+s1.startsWith("he"));
        System.out.println("isEmpty:"+s1.isEmpty());
    }
}

运行结果:

equals:false
equalsIgnoreCase:true
contains:true
startsWith:true
isEmpty:false

1.5 String类的获取功能

  • public int length():

返回此字符串的长度

  • public char charAt(int index):

返回指定索引处的 char 值。索引范围为从 0 到 length() - 1

  • public int indexOf(int ch):

返回指定字符在此字符串中第一次出现处的索引

  • public int indexOf(String str):

返回指定子字符串在此字符串中第一次出现处的索引

  • public int lastIndexOf(int ch,int fromIndex):

返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索

  • public int indexOf(String str,int fromIndex):

返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始

  • public String substring(int beginIndex):

返回一个新的字符串,它是此字符串的一个子字符串

  • public String substring(int beginIndex,int endIndex):

返回一个新字符串,它是此字符串的一个子字符串

例:

String s = "helloworld";
System.out.println("length:"+s.length());
System.out.println("charAt:"+s.charAt(4));
System.out.println("indexOf:"+s.indexOf('l'));
System.out.println("indexOf:"+s.indexOf("owo"));
System.out.println("substring:"+s.substring(2, 6));

运行结果:

length:10
charAt:o
indexOf:2
indexOf:4
substring:llow

1.6 字符串的遍历

public class Practice 
{
    public static void main(String[] args)
    {
        String s = "helloworld";
        for (int i = 0; i < s.length(); i++) 
        {
            System.out.print(s.charAt(i)+" ");
        }
    }
}

运行结果:

h e l l o w o r l d 

1.7 String类的转换功能

  • public byte[] getBytes():

使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中

  • public char[] toCharArray():

将此字符串转换为一个新的字符数组

  • public static String valueOf(char[] data):

返回 char 数组参数的字符串表示形式

  • public static String valueOf(long l):

返回 long 参数的字符串表示形式

  • public String toLowerCase():

使用默认语言环境的规则将此 String 中的所有字符都转换为小写

  • public String toUpperCase():

使用默认语言环境的规则将此 String 中的所有字符都转换为大写

  • public String concat(String str):

将指定字符串连接到此字符串的结尾

例:

//定义一个字符串
String s = "JavaSE";
byte[] bys = s.getBytes();
System.out.print("getBytes:");
for (int i = 0; i < bys.length; i++) 
{
    System.out.print(bys[i]+" ");
}
System.out.println();
char[] chs = s.toCharArray();
System.out.print("toCharArray:");
for (int i = 0; i < chs.length; i++) 
{
    System.out.print(chs[i]+" ");
}
System.out.println();
String ss = String.valueOf(chs);
System.out.println("valueOf:"+ss);

运行结果:

getBytes:74 97 118 97 83 69 
toCharArray:J a v a S E 
JavaSE

1.8 String类的其他功能

  • public String replace(char oldChar,char newChar):

返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的

  • public String replace(String old,String new)

  • public String trim():返回字符串的副本,忽略前导空白和尾部空白

  • public int compareTo(String anotherString):按字典顺序比较两个字符串

  • public int compareToIgnoreCase(String str):按字典顺序比较两个字符串,不考虑大小写

如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo 返回这两个字符串长度的差,即值:this.length()-anotherString.length()

例:

String s1 = "abc";
String s2 = "hijk";
String s3 = "xyz";
String s4 = "hello";
String s5 = "hel";

System.out.println(s1.compareTo(s2));//-7
System.out.println(s3.compareTo(s1));//23
//返回的是这两个字符串长度的差
System.out.println(s4.compareTo(s5));//2

你可能感兴趣的:(java基础总结18-java常用API(String类))