首先我们来说一下java.lang.String类

  1. 这个类代表字符串
  2. API文档中说明,Java程序中所有的字符串字面值(如“abc”)都作为此类的实例实现。

换句话说就是程序当中所有的双引号字符串,都是String类的对象。(就算没有new,也照样是。)

字符串的特点:

  1. 字符串的内容永不可变。【重点】
  2. 字符串可以共享使用。(字符串常量池)
  3. 字符串效果上相对于是char[]字符串数组。(但是底层原理都是byte[]字节数组。)

创建字符串的常见3+1种方式:

3种构造方法:

  • public String()
    创建一个空白的字符串,不含有任何内容。
String str1 = new String();
  • public String(char[] array)
    根据字符数组的内容,来创建对应的字符串。
char[] charArray = {'a', 'b', 'c'};
String str2 = new String(charArray);
  • public String(byte[] array)
    根据字节数组的内容,来创建对应的字符串。
byte[] byteArray = {97, 98, 99};
String str3 = new String(byteArray);

1种直接创建:

  • String str = “abc”
    (这种是直接在字符串常量池中创建)
String str = "abc";

【注意:直接写上双引号,就是字符串对象】

字符串常量池:

!!重点:通过赋值直接创建的String对象在字符串常量池中

public static void main(String[] args) {

        String str1 = "abc";

        String str2 = "abc";

        char[] charArray = {'a','b','c'};
        String str3 = new String(charArray);


        System.out.println(str1 == str2);  //true  在基本类型中,==是比较值是否相等。
        System.out.println(str1 == str3);  //false  在引用类型中,==是比较地址是否相等。
    }
  1. str1先在字符串常量池中寻找,没有则被创建,实际是通过byte[]实现,字符串常量池中的str指向byte[]的地址,最终str1指向byte[]的地址。
  2. str2也先在字符串常量池中寻找,因为字符串对象在常量池中是共享的,所以str2也指向byte[]的地址。
  3. charArray是通过char[]创建,然后str3通过new一个字符串对象。【注意!!这里new的不会在字符串常量池中】
  4. char[]会被转换成byte[]【此处的byte[]地址和str1中的不一样了,仍是char[]的地址】,然后str3指向这个地址。

java 字符串扩展类 java字符串类方法_字符串

String类常用方法:

String当中内容比较的常用的方法有:
  • public boolean equals(Object obj)
    参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true;否则返回false。
String string1 = "hello";
String string2 = "hello";
System.out.println(string1.equals(string2));  //true
  • public boolean equalsIgnoreCase(String str)
    忽略大小写,进行内容比较。
String string1 = "hello";
String string2 = "Hello";
System.out.println(string1.equals(string2));  //false
String当中内容操作常用的方法有:
  • public int length()
    获取字符串当中含有的字符串个数,拿到字符串长度
String string1 = "hello";
System.out.println(string1.length());  //5
  • public String concat(String str)
    将当前字符串和参数字符串拼接成一个新的字符串,并返回这个字符串
String string1 = "hello";
String string2 = "Hello";
String string3 = string2.concat(string1);
System.out.println(string3);  //helloHello
  • public char charAt(int index)
    获取索引位置的单个字符串
String string1 = "hello";
char char1 = string1.charAt(2);
System.out.println(char1);  //l
  • public int indexOf(String str)
    查找参数字符串在本字符串当中首次出现的索引位置
String string1 = "hello";
int num = string1.indexOf("e");
System.out.println(num);  //1
  • public String substring(int index)
    截取从参数位置一直到字符串末尾,返回新的字符串
String string1 = "helloword";
String string2 = strings.substring(5);
System.out.println(string2);  //word
  • public String substring(int begin, int end)
    截取从begin开始,一直到end结束,返回新的字符串,包含begin的字符,不包含end字符。
String string1 = "helloword";
String string2 = strings.substring(0,5);
System.out.println(string2);  //hello
String当中与转换相关的常用的方法有:
  • public char[] toCharArray()
    将当前字符串拆分成为字符数组作为返回值。
String string1 = "helloword";
char[] chars = string1.toCharArray();
for (char a: chars) {
    System.out.print(a + ",");
}
//h,e,l,l,o,w,o,r,d,
  • public byte[] getBytes()
    获得当前字符串底层的字节数组。
String string1 = "helloword";
byte[] bytes = string1.getBytes();
for (byte a: bytes) {
    System.out.print(a + ",");
}
//104,101,108,108,111,119,111,114,100,
  • public String replace(CharSequence oldString, CharSequence newString)
    将所有出现的老字符串替换成新字符串,返回替换之后的新字符串。
String string2 = "套你猴子!!!套你猴子!!";
String replace = string2.replace("套你猴子", "xxxx");
System.out.println(string2);
System.out.println(replace);
//套你猴子!!!套你猴子!!
//xxxx!!!xxxx!!
String当中与切割字符串的方法:
  • public String[] split(String regex)
    按照参数的规则,将字符串切分成为若干部分。
String string3 = "aa,bb,cc";
String[] str1 = string3.split(",");
for (String a: str1) {
    System.out.println(a);
}
//aa
//bb
//cc

注意!!!!!
split方法的参数其实是一个“正则表达式”。
需要特别注意:如果按照英文句点“.”进行切分,将无法切分,获得的字符串数组为空,必须写“\\.”

例如:

String string1 = "aa.bb.cc";
String[] string2 = string1.split(".");
System.out.println(string2.length);  //长度为0,下面foreach不执行
for (String a:str2) {
    System.out.println(a);
}