Java中的String、正则表达式

本文深入探讨 Java 中 String 类的特点及应用,包括其不可变性、常用方法介绍,并对比 StringBuilder 和 StringBuffer 的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. String对象是不可变的,String类对象一旦创建它的所有属性都是final型的,不可更改。String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,用来包含修改后的字符串内容,但最初的String对象并没有发生改变。
    String s="djdksal";//最初创建的字符串 s="aaa"+"123456";//在这个过程中会新生成其它的对象用来存储"aaa"和"123456",之后将s指向最终的生成对象所在的存储空间,但是代码最初生成的s是没有变化的.
  2. StringBuilder和StringBuffer是可变的,二者的区别在于StringBuffer是线程安全的,StringBuilder不是线程安全的。当多线程访问时最好使用线程安全的StringBuffer。在执行效率方面StringBuilder最高,StringBuffer次之,String最低。针对这种情况,一般来说,如果操作的数据量比较小,应该优先使用String类;如果是在单线程下操作大量数据,应该优先使用StringBuffer类;而对于多线程下操作大量数据则优先使用StringBuilder类;
  3. String中的常用方法:
  • length()计算字符串的长度
  • charAt()获取指定索引位置的字符
  • toCharArray()将字符串转化为字符数组
  • getBytes()方法将字符串转化为新的字节数组
  • toUpperCase()方法将字符串转化为大写
  • toLowerCase()方法将字符串转化为小写
  • equalsIgnoreCase()方法忽略大小写的情况下比较字符串是否相等
  • compareTo()方法将两个字符串进行比较大小(按词典顺序比较,大小写不相等)
  • contains()方法判断字符串中是否含有指定字符或者字符串
  • startsWith()方法判断字符串是都以指定字符或者字符串开头
  • endsWith()方法判断字符串是否以指定的字符或者字符串结尾
  • subString()方法截取字符串中指定起始位置的字符
  • concat()方法给原有的字符串连接新的字符串
  • replaceAll()方法用指定的字符或者字符串替换原字符串中指定的字符
  • trim()方法去掉字符串首尾两端的空白字符
  • equals()方法比较两个字符串是否相等,没有覆盖父类的情况下,比较的是引用,这时和直接使用运算符"=="效果相同;覆盖了父类方法之后可以认为比较的是两个对象的内容.
  • split()方法将输入的字符串断开为字符串对象数组,断开边界由正则表达式确定
package string;

import java.util.Scanner;

/**
 * Created by xpengfei on 2017/9/7.
 * 温习java中String的方法以及使用
 */
public class javaString {
    //主方法,用来调用以上测试String的各个子方法
    public static void main(String[] args) {
        Scanner read=new Scanner(System.in);
        System.out.println("请输入要测试的字符串:");
        String s=read.nextLine();
        while(!s.equals("!")){
            System.out.println("length()方法------输入的字符串长度为:"+s.length());
            System.out.println("charAt()方法------字符串中索引位置为1的字符为:"+s.charAt(1));
            char ch[]=new char[s.length()];
            ch=s.toCharArray();
            System.out.print("toCharArray()方法------s字符串转化为数组后为:");
            for (int i = 0; i <ch.length ; i++) {
                System.out.print(ch[i]+"\t");
            }
            System.out.println();
            System.out.println("getBytes()方法,可以将字符串转化为一个新的字节数组!");

            //将字符串转化为大写
            String s1=s.toUpperCase();
            System.out.println("toUpperCase()方法------转化为大写后的字符串:"+s1);
            System.out.println("equals()方法------s和s1相等:"+s.equals(s1));
            System.out.println("equalsIgnoreCase()方法------忽略大小写s和s1是否相等:"+s.equalsIgnoreCase(s1));
            System.out.println("compareTo()方法------s和s1的比较:"+s.compareTo(s1));
            System.out.println("compareTo()方法------s和a+s1的比较:"+s.compareTo("a"+s1));
            s1=s1.toLowerCase();
            System.out.println("toLowerCase()方法------转化为小写后的字符串:"+s1);
            System.out.println("equals()方法------s和s1相等:"+s.equals(s1));

            System.out.println("contains()方法------s中包含xing:"+s.contains("xing"));

            System.out.println("startsWith()方法------s是否以x开头:"+s.startsWith("s"));
            System.out.println("endsWith()方法------s是否以xing结尾:"+s.endsWith("xing"));
            System.out.println("subString()方法------截取s字符串中2-4位置的字符:"+s.substring(2,4));
            System.out.println("concat()方法------给连接字符串namexing"+s.concat("namexing"));
            System.out.println("replaceAll()方法------"+s.replaceAll("xing","XING"));
            System.out.println("trim()方法------去掉s两端的空白字符:"+s.trim());


            System.out.println("请输入要测试的字符串:");
            s=read.nextLine();
        }
    }
}

运行结果
4.String字符串和byte数组之间的转换

  • String字符串转化成byte数组

String str = “abcd”;
byte[] bs = str.getBytes();

  • Byte数组转为String字符串

String str = “abcd”;
byte[] bs = str.getBytes();
String s = new String(bs);




  • 在Java中所有新的格式化功能都由java.util.Formmatter类处理.format()方法模仿自C的printf().在使用上原理是相通的.
Formatter f=new Formatter(System.out);
 f.format("Float:%10.6f\n",12.034);
 //输出结果为Float: 12.034000,,,宽度为10,小数位数为6

正则表达式

  • 表示一位数字 \d
  • 可能有一个负号后面跟着一位或多位数字 -?\d+
  • 任意字符 由 . 表示
  • [abc] 表示包含a、b、c的任意字符(和a|b|c作用相同)
  • [^abc] 除了abc意外的任何字符
  • [a-zA-Z] 从a-z或从A-Z的任何字符
  • [abc[hij]]任意a、b、c、h、i、j字符(同a|b|c|h|i|j)
  • [a-z&&[hij]] 任意h、i、j
  • \s 空白符(空格、tab、换行、回车)
  • \S 非空白符
  • \d 数字[0-9]
  • \D非数字[^0-9]
  • \w词字符[a-zA-Z0-9]
  • \W 非词字符
  • ^一行的起始
  • $一行的结束
  • \b词的边界
  • 使用
//                编写正则表达式字符串
                String regex="[0-9]+";
                //编译正则表达式
                Pattern p=Pattern.compile(regex);
                //已经编译过的Pattern对象上的matcher()方法,加上一个输入字符串,构造一个Matcher对象
                Matcher m=p.matcher(s);
//                调用Matcher对象中的matches()方法,查看是否有满足条件的存在,返回值为boolean
                System.out.println(m.matches());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值