Java教程

Java中的String类

本文主要是介绍Java中的String类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

基本概念

  • java.lang.String类⽤于描述字符串,Java程序中所有的字符串字⾯值都可以使⽤该类的对象加以描述, 如:“abc”。
  • 该类由final关键字修饰,表示该类不能被继承。
public final class String
  • 从jdk1.9开始该类的底层不使⽤char[]来存储数据,⽽是改成 byte[]加上编码标记,从⽽节约了⼀些空间。
  • 该类描述的字符串内容是个常量不可更改,因此可以被共享使⽤(已创建的字符串不能再改变)。
  • String str1 = “abc”; - 其中"abc"这个字符串是个常量不可改变。
  • str1 = “123”;
    将“123”字符串的地址赋值给变量str1。
    改变str1的指向并没有改变指向的内容

常量池的概念

  • 由于String类型描述的字符串内容是常量不可改变,因此Java虚拟机将⾸次出现的字符串放⼊常量池,若后续 代码中出现相同字符串内容则直接使⽤池中已有的字符串对象⽽⽆需申请内存及创建对象,从⽽提⾼了性能。由于存放在常量池中,垃圾不会被回收
String str1 = "123";//字符串放在常量池中
String str2 = "123";//在常量池中寻找是否已存在,存在则指向它
str1 == str2;//true,比较地址
String str3 = new String("123");//只要是使用new就是开辟新的空间,地址不同
str1 == str3;//false

字符串的拼接

尽量使用StringBuilder类实现拼接

String str1 = "123";
String str2 = "456";
String str3 = "789";
str1 = str1+str2+str3;
一开始创建三个空存放字符串

一开始创建三个空存放字符串
在这里插入图片描述实现字符串连接,第一步先运行str1+str2,结果存放在内存中,然后再与str3进行连接,最后产生了两个内存垃圾(不会被回收)
在这里插入图片描述

常用方法

构造方法
在这里插入图片描述

  • String(StringBuffer string)//使用StringBUffer类型构造string
public static void main(String[] args) {

        // 1.使用无参方式构造对象
        // "" 空字符串对象,也就是有对象,只是对象中没有内容
        // null 连空字符串对象都没有
        // String str1 = new String();
        String str1 = "";
        System.out.println(str1); // 啥也没有

        System.out.println("---------------------------------------------");
        // 2.使用byte数组来构造字符串对象
        byte[] bytes = new byte[]{97, 98, 99, 100, 101};
        // 表示使用bytes数组中从下表1开始的2个字节来构造字符串对象 => 先将整数转换为字符,然后串起来变成字符串
        // 98 - 'b'  99 - 'c'
        String str2 = new String(bytes, 1, 2);
        System.out.println(str2); // bc

        // 使用整个字节数组来构造对象
        String str3 = new String(bytes);
        System.out.println(str3); // abcde

        System.out.println("---------------------------------------------");
        // 3.使用char数组来构造字符串对象
        char[] chars = new char[]{'h', 'e', 'l', 'l', 'o'};
        // 使用chars数组中下表从0开始的4个字符来构造字符串对象
        String str4 = new String(chars, 0, 4);
        System.out.println(str4); // hell
        // 使用整个数组构造对象
        String str5 = new String(chars);
        System.out.println(str5); // hello

        System.out.println("---------------------------------------------");
        // 4.使用字符串来构造字符串对象
        String str6 = new String("world");
        System.out.println(str6);
    }

成员方法

  • String toString() //返回字符串本身
  • byte[] getBytes() //将当前字符串内容转换为byte数组并返回
  • char[] toCharArray() //用于将当前字符串内容转换为char数组并返回
String toString()  //返回字符串本身
byte[] getBytes()  //将当前字符串内容转换为byte数组并返回
char[] toCharArray() //用于将当前字符串内容转换为char数组并返回
str = new String("avdsdfs");
System.out.println(str.toString());//avdsdfs
byte[] bytes2 = str.getBytes();//97  118  100  115  100  102  115 
char[] chars2 = str.toCharArray();//a v d s d f s
  • char charAt(int index) //用于返回字符串中指定位置的字符,0-length-1
  • int length() //返回字符串中字符序列的长度
  • boolean isEmpty() //判断字符串是否为空
char charAt(int index)  //用于返回字符串中指定位置的字符,0-length-1
int length()   //返回字符串中字符序列的长度
boolean isEmpty() //判断字符串是否为空
char chars3 = str.charAt(1);
System.out.println(chars3);//v
System.out.println(str.length());//7
System.out.println(str.isEmpty());//false
  • String[] split(String regex) //根据给定的regex将字符串拆分为数组
String str = "I like writing coding best";
String[] str1 = str.split(" ");
for(String e:str1){
    System.out.println(e);
}
I
like
writing
coding
best
  • String substring(beginIndex, endIndex)//返回指定字符串子串,从下标为beginIndex的字符到下标为endIndex-1的字符串结束
  • String substring(int beginIndex)//返回字符串中从下标beginIndex(包括)开始到字符串结尾的⼦字符串
String str = "hello world!";
str = str.substring(0,6);//hello 
str = str.substring(3,6);//lo
  • int compareTo(String anotherString) //⽤于⽐较调⽤对象和参数对象的⼤⼩关系
    如果参数字符串等于此字符串,则值0 ;
    如果此字符串按字典顺序小于字符串参数,则小于0 ; (返回不同字母的大小之差)
    如果此字符串按字典顺序大于字符串参数,则值大于0 。
  • int compareToIgnoreCase(String str) //不考虑⼤⼩写,也就是’a’和’A’是相等的关系
String str1 = "abc";
String str2 = "abg";
System.out.println(str1.compareTo(str2));//-4, c比g小4,所以返回-4
String str1 = "abc";
String str2 = "ABC";
System.out.println(str2.compareToIgnoreCase(str1));//0,不区分大小写
  • String concat(String str) //⽤于实现字符串的拼接
String str = "abc";
String str1 = str.concat("cdefg");//已创建的字符串不能改变,单独的str.concat("cdefg")结果还是abc
System.out.println(str1);//abccde
  • boolean contains(CharSequence s) //⽤于判断当前字符串是否包含参数指定的内容
String str2 = "abc hello world!";
System.out.println(str2.contains("hello"));
System.out.println(str2.contains("abch"));
  • String toLowerCase() //返回字符串的⼩写形式
  • String toUpperCase() //返回字符串的⼤写形式
String str = "abc";
str = str.toUpperCase();//小写变大写,大写不变
String str1 = "ABC";
str1 = str1.toLowerCase();//大写变小写,小写不变
System.out.println(str);//ABC
System.out.println(str1);//abc
  • String trim() //返回去掉前导和后继空⽩的字符串
String str = "  Abc sdf sdf  ";
System.out.println(str);
str = str.trim();
System.out.println(str);
  Abc sdf sdf  
Abc sdf sdf
  • boolean startsWith(String prefix) //判断字符串是否以参数字符串开头
  • boolean startsWith(String prefix, int toffset) //从指定位置开始是否以参数字符串开头
  • boolean endsWith(String suffix) //判断字符串是否以参数字符串结尾
String str = "abc sdf";
System.out.println(str.startsWith("ab"));//true
System.out.println(str.startsWith("abcd"));//false

System.out.println(str.startsWith("sd", 4));//true
System.out.println(str.startsWith("s", 2));//false

System.out.println(str.endsWith("f"));//true
System.out.println(str.endsWith(" sdf"));//true
System.out.println(str.endsWith("gf"));//false
  • boolean equals(Object anObject) //⽤于⽐较字符串内容是否相等并返回
  • boolean equalsIgnoreCase(StringanotherString)//⽤于⽐较字符串内容是否相等并返回,不考虑⼤⼩写,如:'A’和’a’是相等
        // 下面这一行代码创建了几个对象?分别存放在什么位置?
			 String str1 = "abc";      //  1个   常量池
			 String str2 = "abc";
        System.out.println(str1 == str2); //  比较地址  true
        System.out.println(str1.equals(str2)); // 比较内容 true

        System.out.println("----------------------------------");
        // 下面这一行代码创建了几个对象?分别存放在什么位置?
        // String str3 = new String("123"); // 2个  常量池  堆区
        // 比较地址和内容
        String str3 = "hello";
        String str4 = "hello";
        String str5 = new String("hello");
        String str6 = new String("hello");
        System.out.println(str3 == str4);       // 比较地址 true
        System.out.println(str3.equals(str4));  // 比较内容 true
        System.out.println(str3 == str5);       // 比较地址 false
        System.out.println(str3.equals(str5));  // 比较内容 true
        System.out.println(str5 == str6);       // 比较地址 false
        System.out.println(str5.equals(str6));  // 比较内容 true
        
        String str7 = "ABC";
        String str8 = "abc";
        System.out.println(str7.equalsIgnoreCase());//true
这篇关于Java中的String类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!