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
喜欢就点个赞吧!!!🙏 🙏 🙏