java-常用类之String类

1. String类


java中本身并没有直接提供对字符串的基本类型数据,提供了为一个可用关于字符的基本类型是char,但是char类型表示只是单个字符;而字符串是有多个字符组合而成,对于字符串的需求,实际java中是通过一个字符序(CharSequence)列提供的支持,可以将字符序列理解为字符数组(char[]),但是为了符合面向对象这一特征,Java中特别定制了一个用于表示字符串对象的引用数据类型:java.lang.StringString实现了CharSequence接口。

String类是一种定长(初始化之后即最终值,改变只能改变引用地址的指向不能修改堆空间中的对象内容)字符串的表示,区别于StringBuffereStringBuilder

1.1.String类常用的构造器

  • String():构建个空字符(“”)串对象
  • String(String s):根据提供的字符串对象创建String对象
  • String(char[] c):根据提供的字符数组构建一个String对象
  • String(char[] c,int offset,int len):将字符数组中从offset开始截取len个元素作为String对象
public static void main(String[] args) {
        char[] c = {'h', 'e', 'l', 'l','o'};
        // 根据提供的字符数组构建一个String对象
        String s = new String(c);
        System.out.println(s);

        //将字符数组中从offset开始截取len个元素作为String对象
        s = new String(c, 2, 3);
        System.out.println(s);
    }
  • String(byte[] b):将字节数组内容解析为一个String对象
  • String(byte[] b,int offset,int len): 截取字节数组中的某一段元素构建为String对象

空字符串(“”)和null对象的区别?
//空字符串:表示String对象已创建,但是内容为“”,但是可以调用String中的一些成员方法
String a = “”;
//空对象:表示String对象并不存在,无法通过对象调用其他任何方法(会导致空指针异常)
String b = null;

1.2 String常见方法

1.2.1 判断比较操作

String提供的常见判断方法主要包含以下:

  • contains(CharSequence cs):判断目标字符串中是否存在指定子串
// 查询指定字符串是否包含子串
System.out.println("helloword".contains("word"));
  • contentEquals(CharSequence cs):jdk1.5新增,用于比较两个字符序列是否一致
//判断指定的charsequence对象是否与当前对象的字符序列一致
System.out.println("helloword".contentEquals("hello"));
  • equals(Object obj):用于比较两个字符串对象是否一致(完全一致,包括大小写)
  • equalsIgnoreCase(String anotherString):忽略大小写比较两个字符串对象
//比较两个字符串是否完全一致(包括大小写)
System.out.println("hello".equals("Hello"));
// 忽略大小写比较两个字符串对象
System.out.println(" Hello".equalsIgnoreCase("hello"));
  • endsWith(String suffix):判断字符串对象是否以指定的后缀结尾
  • startsWidth(String prefix):判断字符串对象是否以指定的前缀开头
// 判断目标字符串是否以指定的子串结尾
System.out.println("helloworld".endsWith("d"));
// 判断目标字符串是否以指定的子串开头
System.out.println("helloworld".startsWith("h"));
  • isEmpty():判断当前字符串对象是否是空字符串(length == 0)
// 判断目标字符串对象的length是否为0
System.out.println("".isEmpty());
  • matches(String regex):判断当前字符串对象是否匹配给定的正则表达式
// 将目标字符串对象与参数字符串表达式(正则表达式:验证,查找,替换)匹配,能匹配则为true,否则false
System.out.println("123456".matches("123456"));
System.out.println("123456".matches("\\d{6}"));
// // 验证手机号
System.out.println("13245678653".matches("1[35789]\\d{9}"));
  • compareTo(String s):比较两个字符串再字母表的顺序
  • compareToIgnoreCase(String s):// 比较两个字符串在字母表的顺序(忽略大小写)
// 比较两个字符串在字母表的顺序
System.out.println("abc".compareTo("abd")); 
// 比较两个字符串在字母表的顺序(忽略大小写)
System.out.println("abc".compareToIgnoreCase("abD"));      
1.2.2 获取操作

String中常见的获取操作包含如下方法:

  • charAt(int i):获取字符串对象中指定索引处的字符
//获取字符串中指定位置的字符,索引从0开始
System.out.println("helloworld".charAt(0));
  • length():获取字符串的字符个数
// 获取字符串序列中的字符的个数(数组长度)
System.out.println("hello".length());
  • indexOf(int ch):获取指定字符第一次在字符串中出现的索引
  • intdexOf(String str)获取指定字符(串)第一次在字符串中出现的索引
  • lastIndexOf(int ch)获取指定字符最后一次在字符串中出现的索引
  • lastIndexOf(String str)获取指定字符(串)最后一次在字符串中出现的索引
// 获取指定字符串在当前字符串第一次出现的位置
System.out.println("周杰伦弹钢琴,曲目名称叫周杰伦".indexOf("杰伦"));
System.out.println("周杰伦弹钢琴,曲目名称就叫周杰伦".indexOf("杰伦", 2));
// 获取指定字符串在当前字符串最后一次出现的位置
System.out.println("周杰伦弹钢琴,曲目名称就叫周杰伦".lastIndexOf("杰伦"));
1.2.3 转换操作

String中常见的转换操作包含如下方法:

  • toUpperCase():将字符串对象转换为大写
  • toLowerCase():将字符串对象转换为小写
System.out.println("helloworld".toUpperCase());   // 转大写
System.out.println("HelloWorld".toLowerCase());   // 转小写
  • replace(char oldChar,char newChar):替换字符串中指定的字符
  • replace(CharSequence target,CharSequence replacement):替换字符串中指定的子串
  • replaceAll(String regex,String replacement):使用给定的正则表达式将匹配的所有字符串替换
  • replaceFirst(String regex,String replacement):使用给定的正则表达式将匹配的第一个字符串替换
// 使用*替换字符串中指定子串
System.out.println("hello".replace("l", "*"));
String msg = "张三时任组长,私人电话是13568567833,于2022年卸任!\n" +
"李四时任班长,私人电话是17786776456,于2080年卸任";
// 使用指定的正则表达式对目标字符串中匹配的子串替换
System.out.println(msg.replaceAll("1[35789]\\d{9}", "***"));
// 使用指定的正则表达式对目标字符串中匹配的子串替换(只替换找到的第一个元素)
System.out.println(msg.replaceFirst("1[35789]\\d{9}", "***"));
  • valueOf(Object obj):将任何类型数据转换为String对象
char[] b = {'h', 'e', 'l', 'l', 'o'};
System.out.println(String.valueOf(b));
  • getBytes():将字符串对象转换为字节数组
// 将一个字符串转换为字节数组(文件操作常见)
byte[] bytes = "hello".getBytes();
for (byte b : bytes) {
     System.out.print(b + " ");
}
     System.out.println();
  • toCharArray():将字符串对象转换为字符数组
// 将字符串转换成字符数组(新建数组+数组拷贝)
char[] chars = "helloworld".toCharArray();
for (char c : chars) {
     System.out.print(c + " ");
}
     System.out.println();
1.2.4 截取分割操作

String中常见的转换操作包含如下方法:

  • split(String regex)使用指定的正则表达式对字符串分割,并返回字符串数组对象
String info = "1001/张三/18/男/软件工程/65";
// 将指定的分隔符将字符串分割为字符数组(与join相反)
String[] infos = info.split("/");
// 将字符串对象转为int对象
int sno = Integer.parseInt(infos[0]);
int age = Integer.parseInt(infos[2]);
double score = Double.parseDouble(infos[5]);
System.out.println("学号:" + sno);
System.out.println("年龄:" + age);
System.out.println("成绩:" + score);
  • substring(int start):从字符串中指定索引处开始截取,截取到字符串末尾
  • substring(int start,int end):从字符串中start位开始截取到end位结束
// 从指定位置开始截取到字符串末尾
System.out.println("hello".substring(2));
// 从指定字符串的目标索引处开始截取,截取到开始结束索引(不含)处(包前不包后)
System.out.println("hello".substring(2, 4));
  • trim():将字符串前后空格去除
// 去除指定字符串前导和后置空格(中间不影响)
System.out.println("   hello world    ".trim());;
  • join:将一个CharSequence数组转换为字符串(使用特定分隔符)-static(java8新增)
String join = String.join("-", "h", "e", "l", "l", "o");
System.out.println(join);

1.3 动态参数列表

在JDK5中,新增一种动态数组参数语法技术,允许可以在声明方法参数是使用...表示数组参数,例如:

public static void test2(String... s){
    for (String s1 : s) {
        System.out.println(s1);
    }
}
public static void main(String[] args) {
	//传入的参数个数不限
    test2("kobe","james","wade","curry","mc");
}

注意事项:

  • 如果方法的参数除了动态数组参数之外,还有其他类型的参数,则这些类型参数必须声明在参数最前面,即:动态参数列表只能位于参数的最末尾
public static void test2(int i,String... s){
    for (String s1 : s) {
        System.out.println(s1);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值