学无先后,达者为师

网站首页 编程语言 正文

String字符串类

作者:南瓜骨头 更新时间: 2023-11-26 编程语言

String字符串的存储原理

  1. 关于Java JDK中内置的一个类:java.lang.String
  2. String表示字符串类型,属于引用数据类型。
  3. 在java中随便使用双引号括起来的都是String对象。例如:“abc”,“def“,“hello world!“。
  4. java中规定,双引号括起来的字符串,是不可变的,也就是说”abc“自始至终不可变,不能变成”abcd”。

why 不可变?(重点知识)
源代码中,String类中有一个byte[]数组,这个byte[]数组采用了final修饰,因为数组一旦创建长度不可变。并且被final修饰的引用一旦指向某个对象之后,不可再指向其它对象,所以string是不可变的!
“abc”无法变成“abcd"

  1. 在JDK当中双引号括起来的字符串,例如:”abc”“def”都是直接存储在“方法区"的“字符串常量池”当中的。

why 放在字符常量池中?(重点知识)
字符串在实际的开发中使用太频繁。为了执行效率,所以把字符串放到了方法区的字符串常量池当中。

//这两行代码表示底层创建了3个字符串对象,都在字符串常量池当中。
String s1 = "abcdef";
String s2 ="abcdef" + "xy";

//凡是双引号括起来的都在字符串常量池中有一份。
//new对象的时候一定在堆内存当中开辟空间。
String s3 = new String("xy");

在这里插入图片描述

String类常见的方法

  • String s=new String(“”);
  • String s=“";最常用
String s = new String("helloworld!");
System.out.println(s);
--------------------------------------------------------------
String s = "hello";
//默认调用toString()方法,因为System.out.println() + 对象
System.out.println(s); 

String类的byte数组方法

  • String s=new String(byte数组);
  • String s= new String(byte数组,起始下标,长度)
byte[] bytes ={97,98,99}//97是a,98是b,99是c
String s2 = new String(bytes);
// 调用tostring()方法,默认Object的话,会自动输出对象的内存地址。
// 通过输出结果我们得出一个结论:String类已经重写了tostring()方法。
// 输出字符串对象的话,输出的不是对象的内存地址,而是字符串本身。
System.out.println(s2.toString());//abc
System.out.println(s2); //abc
-------------------------------------------------------------
// String(字节数组,数组元素下标的起始位置,长度)
// 将byte数组中的一部分转换成字符串。
String s3 = new String(bytes, offset: 1, length: 2);
System.out.println(s3);// bc

String类的char数组方法

  • String s=new String(char数组);
  • String s=new String(char数组,起始下标,长度);
//将char数组全部转换成字符串
char[] chars={'我''是''中''国''人'}String s4 = new String(chars);
System.out.println(s4);//我是中国人
-------------------------------------------------------------
//将char数组的一部分转换成字符串
String s5 = new String(chars, offset: 2, count: 3);
System.out.println(s5);//中国人

String类的charAt(int index)方法

  • 在括号中输入数字,可以查找字符串的对应下标
//char charAt(int index)
char c = "123".charAt(2);//“123”是一个字符串对象,只要是对象就能点
System.out.println(c);//3

String类的compareTo(String anotherString)方法

  • 字符串之间比较大小不能直接使用 > <,需要使用compareTo方法
//int compareTo(String anotherString)
int result = "abc".compareTo("abc");
System.out.println(result);//0(等于0)前后一致10-10=0

int result2 = "abcd".compareTo("abce");
System.out.println(result2);//-1(小于e)前小后大8-9=-1

int result3 = "abce".compareTo("abcd");
System.out.println(result3);//1大于0)前大后小9-8=1
//拿着字符串第一个字母和后面字符串的第一个字母比较。能分胜负就不再比较了。
System.out.println("xyz".compareTo("yxz")); // -1

String类的contains(CharSequence s)方法

  • 判断前面的字符串中是否包含后面的子字符串。
//booLean contains(CharSequence s)
System.out.println("Hellolorld.java".contains(".java")); // true
System.out.println("http://www.baidu.com".contains("https://")); // false

String类的endswith(String suffix)方法

  • 判断当前字符串是否以某个子字符串结尾。
//boolean endswith(String suffix)
System.out.println("test.txt".endsWith(".java")); // false
System.out.println("test.txt".endsWith(".txt")); // true
System.out.println("fdsajklfhdkjlsahfjkdsahjklfdss".endswith("ss"));// true

String类的equals(Object anObject)方法

  • 比较两个字符串必须使用equals方法,不能使用“=”

注意:调用equals方法时,若出现:a.equals("123");
需将上面的代码改成以下格式,以防空指针异常:"123".equals(a);

// boolean equals(Object anObject)
// equals只能看出相等不相等。
// compareTo方法可以看出是否相等,并且同时还可以看出谁大谁小。
System.out.println("abc".equals("abc")); // true

String类的equalsIgnareCase(String anotherString)方法

  • 判断两个字符串是否相等,并且同时忽略大小写。
//boolean equalsIgnareCase(String anotherString)
System.out.println("ABc".equalsIgnoreCase("abc")); // true

String类的getBytes()方法

  • 将字符串对象转换成字节数组
//byte[] getBytes()
byte[] bytes ="abcdef".getBytes();
for(int i = 0; i < bytes.length;i++)(
    System.out.println(bytes[i]);//97 98 99 100 101 102
}

String类的indexOf(String str)方法

  • 判断某个子字符串在当前字符串中第一次出现处的索引(下标)
//int indexOf(String str)
System.out.println("oraclejavac++.netc#javaoraclec++".indexOf("java"));// 6

String类的isEmpty()方法

  • 判断某个字符串是否为“空字符串”
//boolean isEmpty()
//底层源代码调用的应该是字符串的Length()方法。
String s ="";
System.out.println(s.isEmpty());//true

String s = "a";
System.out.println(s.isEmpty());//false

String类的Length()方法

  • 判断数组长度是Length属性,判断字符串长度是length()方法
//int Length()
System.out.println("abc".length()); // 3
System.out.println("".length()); // 0

String类的LastIndexof(String str)方法

  • 判断某个子字符串在当前字符串中最后一次出现的索引(下标)
//int LastIndexof(String str)
System.out.println("oraclejavac++javac#phpjavapython".lastIndexOf(str."java")); //22

String类的replace()方法

  • 替换
//String replace(CharSequence target,CharSequence replacement)
//String的父接口就是:CharSequence
String newString = "http://www.baidu.com".replace( target: "http://", replacement: "https://");
System.out.println(newString);//https://ww.baidu.com

//把以下字符串中的“=”替换成“:”
String newString2 = "name=zhangsan&password=123&age=20".replace(target: "=", replacement: ":");
System.out.println(newString2); //name:zhangsan&password:123&age:20

String类的split(String regex)方法

  • 拆分字符串
//String[] split(String regex)
String[] ymd = "1980-10-11".split(regex:"-");//“1980-10-11“以“-“分字符进行折分。
for(int i =0;i < ymd.length;i++){
    System.out.println(ymd[i]);//1980  10  11
}

String param = "name=zhangsan&password=123&age=20";
String[] params = param.split( regex: "&");
for(int i = 0; i <params.length; i++){
    System.out.println(params[i]);//name=zhangsan  password=123  age=20
}

String类的startsWith(String prefix)方法 (掌握)

  • 判断某个字符串是否以某个子字符串开始
// boolean startswith(String prefix)
System.out.println("http://www.baidu.com".startsWith("http"));// true
System.out.println("http://www.baidu.com".startsWith("https"));// false

String类的substring(int beginIndex)方法

  • 截取字符串
//String substring(int beginIndex)参数是起始下标。
System.out.println("http://www.baidu.com".substring(7)); //www.baidu.com

// String substring(int beginIndex,int endIndex)
// beginIndex起始位置(包括)
// endIndex结束位置(不包括),也就是从endIndex - 1的位置包括
System.out.println("http://www.baidu.com".substring(7, 10)); //www

String类的toCharArray()方法

  • 将字符串转换成char数组
//chap[] toCharArray()
char[]chars ="我是中国人".toCharArray();
for(int i = 0;i < chars.length;i++)
    System.out.println(chars[i]);//我 是 中 国 人
}

String类的toLowerCase()方法 (掌握)

  • 转换为小写
//String toLowerCase()
System.out.println("ABCDefKXyz".toLowerCase());//abcdefkxyz

String类的toUpper()方法 (掌握)

  • 转换为大写
//String toUpperCase();
System.out.println("ABCDefKXyz".toUpperCase());//ABCDEFKXYZ

String类的trim()方法

  • 去除字符串前后空白
//String trim();
System.out.println("        hello     world   ".trim());

String类的valueOf()方法

  • 将“非字串”转换成“字符串”
//String中只有一个方法是静态的,不需要new对象
//这个方法叫做valueOf
String s1 = String.valueOf(true);//true
String s1 = String.valueOf(180);//180
String s1 = String.valueOf(3.14);//3.14

//这个静态的valueOf()方法,参数是一个对象的时候,会自动调用该对象的toString()方法
String s1 = String.valueOf(new Customer());
//System.out.println(s1);//没有重写toString()方法之前是对象内存地址 com.bjpowernode.javase.
System.out.println(s1);//我是一个VIP客户!!!

Object obj = new Object();
//通过源代码可以看出:本质上System.out.println()这个方法在输出任何数据的时候都是先转换成字符串,再输出。
//println调用valueOf调用toString
System.out.println(obj);

class Customer{
    public String toString(){
        return "我是一个VIP客户!!!"
    }
}

原文链接:https://blog.csdn.net/weixin_47957908/article/details/129843297

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新