(JavaSE) String类

发布于:2023-01-05 ⋅ 阅读:(460) ⋅ 点赞:(0)

⭐字符串构造

在这里插入图片描述
3种构造方式

        String str1="hello";
        String str2=new String("abc");
        char[] chars={'x','y','z'};
        String str3=new String(chars);//数组转字符串

在这里插入图片描述
String类有两个成员:value[],hash。
在这里插入图片描述

Java中的字符串没有’\0’。
在这里插入图片描述
求字符串长度:
.length()

        System.out.println(s1.length());
        System.out.println("hello".length());

⭐比较两个字符串是否相等

🎈equals()

常见错误:

        String s1 = new String("hello");
        String s2 = new String("Hello");
        System.out.println(s1==s2);
false

s1和s2这两个引用存的是地址,比较的是地址而不是内容

正确的比较方法:

        System.out.println(s1.equals(s2));

String类重写了Object类的.equals()。
在这里插入图片描述

🎈equalsIgnoreCase()

忽略大小写进行比较

System.out.println(s1.equalsIgnoreCase(s2));

⭐比较两个字符串的大小

🎈compareTo()

在这里插入图片描述

String s1 = new String("hello");
        String s2 = new String("aello");
        int ret=s1.compareTo(s2);
        if(ret>0){
            System.out.println("s1>s2");
        }else if(ret==0){
            System.out.println("s1=s2");
        }else {
            System.out.println("s1<s2");
        }

🎈compareToIgnoreCase()

也可以忽略大小写进行比较

        int ret=s1.compareToIgnoreCase(s2);

⭐字符串查找

🎈charAt()

用下标访问字符串的每一个字符

String str="abcdef";
        for (int i = 0; i < str.length(); i++) {
            char ch=str.charAt(i);
            System.out.println(ch);
        }

🎈indexOf()

从头开始找遇到第一个就返回其下标

System.out.println(str.indexOf('c'));

也可以指定查找的起点

        System.out.println(str.indexOf('c',3));
//从3下标开始找'c'

查找字符串的子串

        System.out.println(str.indexOf("abc"));
//返回'a'的下标
//也能指定查找的起点
        System.out.println(str.indexOf("abc",4));

🎈lastIndexOf()

        System.out.println(str.lastIndexOf('c'));

从后往前找遇到第一个返回其下标

//也能指定查找的起点
        System.out.println(str.lastIndexOf('c',4));
        //也能找字符串
        System.out.println(str.lastIndexOf("abc"));
        System.out.println(str.lastIndexOf("abc",3));

如果找不到:返回-1

String str="ababcabcd";
System.out.println(str.lastIndexOf("abc",3));
2

⭐关于String[] args

public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }

运行结果为空。

我们需要对args数组传参数,通过命令行来传。
在这里插入图片描述

⭐转化

🎈数值和字符串之间的转换

🔥valueOf()

//整数转字符串
String str=String.valueOf(123);
System.out.println(str);
//布尔类型转字符串
String str2=String.valueOf(true);

学生类转字符串

class Student{
    public String name;
    public int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
@Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
 String s4 = String.valueOf(new Student("Hanmeimei", 18));

Student{name='Hanmeimei', age=18}

🔥parseInt()

int val=Integer.parseInt("123");
int val=Integer.valueOf("123");
double val2=Double.parseDouble("12.25");

🎈大小写转换

🔥toUpperCase()

小写转大写
//只认小写字母,不是小写字母不操作
String str="helloGT高";
String ret=str.toUpperCase();

🔥toLowerCase()

大写转小写
String str2="ABCDEFG";
String ret2=str2.toLowerCase();

注意:字符串中的库函数都是返回新字符串,不在原字符串上修改

🎈字符串转数组

🔥toCharArray()

char[] chars=str2.toCharArray();
System.out.println(Arrays.toString(chars));

🎈格式化

🔥format()

String ret3=String.format("%d,%d,%d",2012,12,12);
        System.out.println(ret3);
2012,12,12

⭐字符串替换

🎈replace()

在这里插入图片描述

🔥replace(char oldChar,char newChar)

在这里插入图片描述

pbpbcpbcdpbcdef

🔥replace(CharSequence target,CharSequence replacement)

在这里插入图片描述

pkpkcpkcdpkcdef

🔥replaceAll()

String ret=str1.replaceAll("abc","pkrg");
        System.out.println(ret);
abpkrgpkrgdpkrgdef

🔥replaceFirst()

String ret3=str1.replaceFirst("abc","pkrg");
        System.out.println(ret3);
abpkrgabcdabcdef

⭐字符串拆分

🎈split()

返回字符串数组

🔥String[] split(String regex)

String str="zhangsan&wangwu&lisi&zhaoliu";
String[] ret=str.split("&");
System.out.println(Arrays.toString(ret));
[zhangsan, wangwu, lisi, zhaoliu]

🔥String[] split(String regex, int limit)

拆分成limit组

String[] ret=str.split("&",2); System.out.println(Arrays.toString(ret));
[zhangsan, wangwu&lisi&zhaoliu]
一个例子
String str2="127.0.0.1";
        String[] ret2=str2.split("\\.");
        for (String x:ret2) {
            System.out.println(x);
        }

在这里插入图片描述

127
0
0
1
String str3="127\\0\\0\\1";
String[] ret3=str3.split("\\\\");
for (String x:ret3) {
      System.out.println(x);
}
127
0
0
1

String str3="127\\0\\0\\1";
        String[] ret4=str3.split("/");
        for (String x:ret4) {
            System.out.println(x);
        }
127\0\0\1
//没有分割

多种分隔符的情况:两个分隔符用’|'连接

String str4="name=zhangsan&age=18";
        String[] ret5=str4.split("=|&");
        for (String x:ret5) {
            System.out.println(x);
        }
name
zhangsan
age
18

多次拆分:

String str4="name=zhangsan&age=18";
        String[] ret5=str4.split("&");
        for (String x:ret5) {
            String[] ss=x.split("=");
            for (String s:ss) {
                System.out.println(s);
            }
        }
name
zhangsan
age
18

⭐字符串截取

🎈substring()

在这里插入图片描述

String str="helloworld";
        String ret=str.substring(1);
        System.out.println(ret);
        String ret1=str.substring(1,4);//[1,4)
        System.out.println(ret1);
elloworld
ell

⭐去掉空格

🎈trim()

去掉字符串左右两边的空格

String str="  hello  hello       ";
        String ret=str.trim();
        //System.out.print(str);
        System.out.print(ret);
        System.out.println("ppppp");
hello  helloppppp

⭐判断是否包含子串

🎈contains()

String str="  hello  hello       ";
Boolean flg=str.contains("hello");
System.out.println(flg);
true

⭐判断是否以某字符串结尾

🎈endsWith()

String str ="abcabcdabcdef";
System.out.println(str.endsWith("cdef9"));
System.out.println(str.startsWith("abc"));
false
true

⭐字符串常量池

底层是一个StringTable的哈希表。

String str1="abcd";
        String str2="abcd";
        String str3=new String("abcd");
        String str4=new String("abcd");
        System.out.println(str1==str2);
        System.out.println(str3==str4);
        System.out.println(str1==str3);
true
false
false

在这里插入图片描述

public static void main(String[] args) {
        String str1="abc"+"def";
        }
        str1在编译阶段就是"abcdef"

在这里插入图片描述

⭐intern方法

手动将创建的String对象添加到常量池中。

char[] ch = new char[]{'a', 'b', 'c'};
        String s1 = new String(ch);
        //s1.intern();
        String s2 = "abc";
        System.out.println(s1 == s2);
不加s1.intern(); 输出false
加了之后输出true

在这里插入图片描述

在这里插入图片描述

⭐字符串的不可变性

在这里插入图片描述

⭐字符串修改

long start = System.currentTimeMillis();
 String s = ""; 
 for(int i = 0; i < 100; ++i)
 { 
    s += i; //每次都会产生新的字符串,不会在原字符串上修改
 }
 long end = System.currentTimeMillis(); 
 System.out.println(end - start);

⭐StringBuilder

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🎈reverse()

StringBuilder stringBuilder=new StringBuilder("hello");
        stringBuilder.reverse();
        System.out.println(stringBuilder);
olleh

在这里插入图片描述
String==》StringBuilder:调用StringBuilder的构造方法或StringBuilder.append()。
StringBuilder==》String:StringBuilder.toString()。

⭐StringBuilder和StringBuffer的区别

在这里插入图片描述

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到