详解Java-----String类

Java-----String类


String类的特性

String类:代表字符串。Java程序中的所有字符串字面值(比如“helloworld”)都作为此类的实例实现。
可以看见String是一个final类, 代表不可变的字符序列。
String 对象的字符内容是存储在一个字符数组 value[] 中 的。
在这里插入图片描述

String对象的创建
  • String str = "hello";
  • String str1 = new String();
  • String str2 = new String(String original);
  • String str3 = new String(char[] a);
package com.String;

public class String1 {
    public static void main(String[] args) {
        String str = "hello";
        // 相当于 this.value = new char[0];
        String str1 = new String();
        String str2 = new String("aaa");
        String str3 = new String(new char[]{'1', '2'});
        System.out.println(str+"---"+str1+"---"+str2+"---"+str3);

    }
}

显示:
在这里插入图片描述

String类的内存解析

看个例子

package com.String;

public class String_1 {
    public static void main(String[] args) {
        String string = "abc";
        String string1 = new String("abc");
        System.out.println(string == string1);
    }
}

结果是:
在这里插入图片描述
解释:字符串常量存储在字符串常量池,目的是共享;字符串非常量对象存储在堆中 。
在这里插入图片描述
再看个例子:

package com.String;

public class string_2 {
    public static void main(String[] args) {
        String s1 = "python";
        String s2 = "java";
        String s3 = "pythonjava";
        String s4 = "python"+"java";
        String s5 = s1 + "java";
        String s6 = "python"+s2;
        String s7 = s1 + s2;
        System.out.println(s3 == s4);
        System.out.println(s3 == s5);
        System.out.println(s6 == s5);
        System.out.println(s3 == s7);
    }
}

s3和s4指向常量区的“pythonjava”,自然相等
而 s5:在在堆空间中产生 了一个字符串 s1+" java"(也就是"pythonjava" )
产生新的String对象,在堆中开辟一块空间存放此对象。s6、s7也是,但由于产生的对象不同,所以它们并不相等。
在这里插入图片描述

String类的常用方法

  • int length() 返回字符串的长度: return value.length
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "武汉加油";
        System.out.println(s1.length());
    }
}

毋庸置疑,结果是4:
在这里插入图片描述

  • char charAt(int index) 返回某索引处的字符 return value[index]
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "武汉加油";
        System.out.println(s1.charAt(0));
    }
}

结果:
在这里插入图片描述

  • boolean isEmpty() 判断是否是空字符串: return value.length == 0
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "武汉加油";
        System.out.println(s1.isEmpty());
    }
}

结果:
在这里插入图片描述

  • String toLowerCase() 使用默认语言环境 将 String 中的所有字符转换为小写
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "WuHanJiaYou";
        System.out.println(s1.toLowerCase());
    }
}

结果:
在这里插入图片描述

  • String toUpperCase() 使用默认语言环境 将 String 中的所有字符转换为大写
    与toLowerCase()类似
  • String trim() 返回字符串的副本 忽略前导空白和尾部 空白
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "  WuHan  JiaYou  ";
        System.out.println(s1.trim());
    }
}

结果(可见对中间的空格无影响):
在这里插入图片描述

  • boolean equals(Object obj) 比较字符串的 内容 是否相同
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "  WuHan  JiaYou  ";
        System.out.println(s1.equals("China"));
    }
}

结果:
在这里插入图片描述

  • boolean equalsIgnoreCase(String anotherString) 与 equals 方法类似 忽略大小写

  • String concat(String str) 将指定字符串连接到此字符串的结尾 。 等价于用“+”

  • int compareTo(String anotherString) 比较两个字符串的 大小
    看源码:
    其实返回的是两个字符串不一样字符的差值
    在这里插入图片描述

package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abe";
        System.out.println(s1.compareTo(s2));
    }
}

结果为:
在这里插入图片描述

  • String substring(int beginIndex) 返回一个新的字符串 它是此字符串的从beginIndex 开始截取到最后的一个子字符串 。

  • String substring(int beginIndex, int endIndex) 返回一个新字符串 它是此字符串从 beginIndex 开始截取到 endIndex的一个子字符串 。

package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "abcdefg";
        System.out.println(s1.substring(2));
        System.out.println(s1.substring(2,5));
    }
}

结果如下:
在这里插入图片描述

  • boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束

  • boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始

  • boolean startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始

package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "abcdefg";
        System.out.println(s1.startsWith("c",2));
    }
}

结果:
在这里插入图片描述

  • boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列
    时,返回 true
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "abcdefg";
        System.out.println(s1.contains("bcde"));
    }
}

结果:
在这里插入图片描述

  • int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "abcdefg";
        System.out.println(s1.indexOf("cd"));
    }
}

结果:
在这里插入图片描述

  • int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后
    一次出现处的索引,从指定的索引开始反向搜索。
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "abcdefg";
        System.out.println(s1.lastIndexOf("cd",4));
    }
}

结果:
在这里插入图片描述

  • String replace(char oldChar, char newChar) 返回 一个新的字符串 它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的.
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "abcdefg";
        System.out.println(s1.replace("bcd","aaa"));
    }
}

结果:
在这里插入图片描述

  • boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式 。
public class String_method {
    public static void main(String[] args) {
        String s1 = "1411279054@qq.com";
        System.out.println(s1.matches("\\d+@\\w+.\\w+"));
    }
}

在这里插入图片描述

  • String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串 。
package com.String;

public class String_method {
    public static void main(String[] args) {
        String s1 = "14aaafsasd11sfda27aftre90aaffaa54";
        String[] s2 = s1.split("[a-z]");
        for(int i=0;i<s2.length;i++){
            System.out.print(s2[i]);
        }
    }
}

结果:
在这里插入图片描述

String的与其他类型转换

String与基本数据类型转换

这里演示int和String类型的转化,其他基本数据类型类似
String—>int: public static int parseInt (String s)
int—>String: 调用 String 类的 public String valueOf int n) 可将 int 型转化为字符串

package com.String;

public class String_method {
    public static void main(String[] args) {
        String str1 = "123";
        int number = 123456;
        int num = Integer.parseInt(str1);
        String str2 = String.valueOf(number);
        System.out.println(num);
        System.out.println(str2);
    }
}

在这里插入图片描述

String 与字符数组转换

字符数组 ---->字符串

  • String 类 的 构造器: String(char[]) 和 String(char[] ,int offset ,int length) 分别用字符数组中的全部字符和部分字符创建 字符串 对象。
package com.String;

public class String_method {
    public static void main(String[] args) {
        char[] chars = {'a','b','c','d','e'};
        String str1 = new String(chars,2,2);
        System.out.println(str1);
    }
}

在这里插入图片描述

字符串 —> 字符 数组

  • public char[] toCharArray 将 字符串中的全部字符存放在一个字符数组中的方法。
  • package com.String;

public class String_method {
public static void main(String[] args) {
String str1 = “abcdefg”;
char[] chars = str1.toCharArray();
for (int i =0;i<chars.length;i++)
System.out.print(chars[i]+" ");
}
}
结果:
在这里插入图片描述

  • public void getChars( int srcBegin, int srcEnd, char[] dst,int dstBegin)提供了将指定索引范围内的字符串 存放到数组中的方法。
String 与字节数组转换

String—>byte[]:

  • public byte[] getBytes 使用平台的默认字符集(编译器设置的)将此 String 编码为byte 序列,并将结果存储到一个新的 byte 数组中 。
  • public byte[] getBytes (String charsetName 使用 指 定的 字符集 将
    此 String 编码到 byte 序列,并将结果存储到新的 byte 数组 。
package com.String;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class StringChange {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str1 = "love 爱你";
        byte[] bytes = str1.getBytes();
        byte[] bytes2 = str1.getBytes("gbk");
        System.out.println(Arrays.toString(bytes));
        System.out.println(Arrays.toString(bytes2));

    }
}

我的intellJ 默认是utf-8,它默认每个汉字三个字节,而gbk默认两个字节。
在这里插入图片描述
byte[] —> String:

  • String(byte) 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String 。
package com.String;

import java.io.UnsupportedEncodingException;

public class StringChange {
    public static void main(String[] args) throws UnsupportedEncodingException {
        byte[] bytes = {108, 111, 118, 101, 32, -25, -120, -79, -28, -67, -96};
        String s = new String(bytes);
        System.out.println(s);
    }
}

结果为:
在这里插入图片描述

PS:关于正则表达式的知识,请参考博客https://blog.csdn.net/weixin_45640609/article/details/104169826https://blog.csdn.net/weixin_45640609/article/details/104169826

喜欢就点个赞吧!!!🙏 🙏 🙏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值