美文网首页
JavaSE常用API之String相关

JavaSE常用API之String相关

作者: WEtcmind | 来源:发表于2019-03-30 18:28 被阅读0次

    0x01 java.lang.String


    String是不可变的,且在创建String的时候,JVM会在常量池中保存一份引用,当再次创建相同的String时,JVM会从常量池中寻找是否存在引用,存在则将引用给新的String,不存在则创建!常量池在JDK1.7之后放入到堆中了

    1. 构造方法
      • new String() 初始化一个空的字符串对象
      • new String(String original) 初始化一个新建的String对象,使其表示一个与参数相同的字符序列
      • new String(byte[] bytes) 使用默认字符集编码指定的byte数组 创建一个新的String对象
      • new String(byte[] bytes,Charset charset) 通过指定字符集的byte数组,创建一个新的String对象
      • String(byte[] bytes, int offset, int length, Charset charset) 通过指定的字符集的byte数组 从offset处开始创建到length处的String对象 长度为length

    代码示例:

    //创建一个空的字符串对象
    String str = new String(); 
    
    //创建一个指定字符序列的字符串对象
    String s5 = new String("ABC");
    
    //通过默认字符集的byte数组创建一个字符串对象
    byte[] data = new byte[32];
    String password = new String(data);
    
    //通过指定字符集的byte数组,创建一个新的字符串对象
    byte[] data = new byte[32];
    String str = new String(data,"utf-8");
    
    //通过指定的字符集的byte数组 从offset处开始创建到length处的String对象 长度为length
    byte[] data = new byte[1024];
    String str = new String(data, 0, 12,"utf-8");
    
    1. 方法
      注意:

      以下方法可直接使用,不用自建 。但使用下列方法的大前提是导入相关类且存在字符串引用,如:
      import java.util.Scanner; //导入类包
      String str = "AbCdEfghIjKlmnOpqRsTuvwXYz "; //创建字符串引用

      • int length() 返回此字符串的长度
      • char charAt(int index) 返回指定索引处的char值 ,返回的是个字符(char),不是字符串
      • int indexOf(String str) 返回字符串第一次匹配时的索引下标
      • int indexOf(String str,int fromIndex) 返回字符串第一次匹配时的索引下标,从从指定的索引下标开始
      • int lastIndexOf(String str) 返回字符串最后一次匹配的索引下标
      • boolean startsWith(String prefix) 判断此字符串是否是以指定字符前缀开始
      • boolean endWith(String suffix) 判断此字符串是否是以指定字符后缀结尾
      • char[] toCharArray() 将此字符串转换为一个新的字符数组
      • String toUpperCase() 将此字符串中所有的英文字母转换为大写后返回
      • String toLowerCase() 将此字符串中所有的英文字母转换为小写后返回
      • String substring(int beginIndex) 将此字符串从索引beginIndex开始截取,返回到字符串结尾的一个子字符串
      • String substring(int beginIndex,int endIndex) 将此字符串从索引beginIndex开始截取,返回到endIndexc处结尾的一个子字符串
      • String trim() 返回此字符串去除空字符之后的结果
      • String toString() 返回此字符串对象本身
      • boolean matches(String regex) 判断此字符串是否匹配给定正则表达式

      注意:

      默认从边界位置开始 完整的、全部的 匹配正则表达式,^和$ 不写也可,且方法内部:
      public boolean matches(String regex) {
      return Pattern.matches(regex, this);
      }
      调用了Pattern类的matches方法,不用再自行创建一个Pattern类 ,且String大部分与正则表达式 的 方法内部都有调用Pattern类的方法

      • String replaceAll(String regex,String replacement) 使用给定的字符序列替换此字符串所有匹配字面序列值
      • String split(String regex) 使用给定的正则表达式,匹配,拆分字符串
      • byte[] getBytes() 使用默认字符集将String编码为byte序列,将结果储存到一个新的byte[] 数组中
      • byte[] getBytes(Charset charset) 使用指定字符集将String编码为byte序列,将结果储存到一个新的byte[] 数组中
      • boolean equals(Object anObject) 判断对象和此字符串是否相等

    代码示例:

    public static void main(String[] args) {
        StringMethodDemo demo = new StringMethodDemo();
        System.out.println("-----------------常用String方法演示------------我是分割线------------------------------");
        demo.commonMethod();
        System.out.println("-------------------查找字符串出现------------我是分割线------------------------------");
        demo.findStr();
        System.out.println("--------------------url截取hsot---------我是分割线------------------------------");
        demo.subUrl();
        System.out.println("--------------------字符串遍历----------我是分割线------------------------------");
        demo.traversalString();
        System.out.println("--------------------字符串去除空格--------------我是分割线------------------------------");
        demo.trimStrSpace();
        System.out.println("--------------------检测文件-------我是分割线------------------------------");
        demo.checkFile();
    }
    public void commonMethod(){
        String str = "ancbaksakhfaka";
        //String.charAt(): 按照下标 返回指定索引处的 char 值。
        System.out.println("str的第14个字符为:"+str.charAt(13));
        //String.length(): 返回字符串的长度。
        System.out.println("str的长度为:"+str.length());
        //String.indexOf(): 返回字符串第一次出现的位置索引下标.
        int a = str.indexOf("k");
        System.out.println("k在str中第一次出现的索引下标为:"+a);
        //String.lastIndexOf(): 返回字符串最后一次出现的位置索引下标.
        a = str.lastIndexOf("a");
        System.out.println("a在str中最后一次出现的索引下标为:"+a);
        str= "deMo.docX";
        String UpFile = str.toUpperCase();
        System.out.println("转换为大写之后的字符串:"+UpFile);
        String LowerFile = str.toLowerCase();
        System.out.println("转换为小写之后的字符串:"+LowerFile);
        String file = "demo.docx";
        LowerFile = file.toLowerCase();
        System.out.println("比较和源字符串是否相同:"+ file == LowerFile);
    }
    public void traversalString(){
        /** 遍历字符串  */
        String str = "你好Java";
        for(int i=0;i<str.length();i++){
            System.out.print(str.charAt(i)+" ");
            System.out.println((int)str.charAt(i));
        }
    }
    public void subUrl(){
        /** url截取 host主机 和 文件名 */
        String url ="http://www.google.cn/cate/category.html";
        String host = url.substring(7,url.indexOf("/",7));
        String file_name = url.substring(url.lastIndexOf("/")+1);
        System.out.println(host);
        System.out.println(file_name);
        
    }
    public void trimStrSpace(){
        /** trim()  当且仅当 字符串的开始和末尾有空字符时去除  中间的空字符无法去除  */
        String chinese = "   今天的我很困 ,  没有办法我只能打瞌睡了   ";
        System.out.println(chinese.trim()+"\n");        
    }
    public void findStr(){
        String str = "啊啊啊啊啊啊啊啊";
        /** 查找指定开头的字符串 */
        boolean b = str.startsWith("啊");
        System.out.println(b);
        b = str.startsWith("今天");
        System.out.println(b);
        b = str.startsWith("");
        System.out.println(b);
    }
    /** 验证文件正确性*/
    public void checkFile(){
        String file = "demo.docx";
        /** 判断 file是否以 .png 结尾 */
        if(file.endsWith(".png")){
            System.out.println("这是图片文件");
        }else{
            System.out.println("这不是图片文件");
        }
        
        file = "background.Png";
        /**将此字符串中所有的大写英文字母转换为小写 */
        if(file.toLowerCase().endsWith(".png")){
            System.out.println("图片!");
        }else {
            System.out.println("非图片!");
        }
    
        String url = "https://www.baidu.com/index.php";
        /** 判断 url 是否以 https://开头 */
        if(url.startsWith("https://")){
            System.out.println("安全加密通信");
        }else {
            System.out.println("非安全的通信");
        }
    }
    /**
     * boolean equals(Object anObject)  判断对象内容否正确
     */
    public class checkUserInput {
        
        public static void main(String[] args) {
            //创建接收器
            Scanner scan = new Scanner(System.in);
            //预定义一个用户名和密码
            String username,pwd;
            do{
                //接收控制台输入的用户名
                System.out.println("请输入用户名");
                username = scan.nextLine();
                //接收控制台输入的密码
                System.out.println("请输入密码");
                pwd = scan.nextLine();
                //当用户名和密码不相同时 提示登录失败,相同时提示登录成功 
                if(!"熊大".equals(username) || !"123".equals(pwd))){
                    System.out.println("登录失败!");
                }else{
                    System.out.println("登录成功");
                    //打桩
                    System.out.println("用户名:"+username+" 密码 :"+pwd);
                }
            //当用户名和密码不相同时,循环输入,直到相同为止
            }while(!"熊大".equals(username) || !"123".equals(pwd));
            
            
        }
    }
    

    0x02 正则表达式相关知识:


    正则表达式-1.png
    正则表达式-2.png
    正则表达式-3.png
    正则表达式-4.png
    正则表达式-5.png
    正则表达式-6.png
    正则表达式-7.png
    正则表达式-8.png
    正则表达式-9.png

    有关正则表达式方法代码示例:
    java.util.regex.Pattern

    /**   
     * 正则匹配演示  
     * Pattern 正则表达式的编译表示形式
     * 指定为字符串的正则表达式必须首先编译为此类的实例。然后可将得到的模式用于创建Matcher对象,
     * 依照正则表达式。该对象可以与任意字符序列匹配。
     * 执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
     * 
     */
    public class PatternDemo {
    
        public static void main(String[] args) {
            String regex = "hello[0-9]";
            String str = "hello1";
            test(regex,str);
        }
        
        public static void test(String regex,String str) {
            //创建一个正则表达式对象
            Pattern p = Pattern.compile(regex);
            //创建一个匹配器
            Matcher m = p.matcher(str);
            //判断匹配器是否匹配正则
            boolean b = m.matches();
            System.out.println(b);
            //输出匹配结果
            System.out.println(m.group());
        }
    }
    

    java.lang.String

    public class StringMatchesDemo {
        /**
         * String 字符串支持正则表达式的相关方法之一:
         * boolean matches(String regex) 
         * 使用给定的正则表达式判断当前字符串是否符合格式要求
         * 
         * "hshshakssj@ss.cn"
         * [a-zA-Z0-9_]+@[a-zA-Z0-9]+(\.[a-zA-Z]+)+
         * 
         */
        public static void main(String[] args) {
            //定义一个 “正确的” email 
            String email = "hshshakssj@ss.cn";
            //定义一个错误的email
            String etc = "hahahah";
            //构建匹配正则表达式
            String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
            //判断 “正确的” email是否和正则表达式匹配 并使用一个boolean 变量存储
            boolean b = email.matches(regex);
            //判断email是否“正确”
            if(b){
                System.out.println(email+":匹配邮箱成功");
            }else {
                System.out.println(email+":匹配失败");
            }
            //判断错误的 email 是否和正则表达式匹配 并使用一个boolean 变量存储
            b = etc.matches(regex);
            //判断email是否“正确”
            if(b){
                System.out.println(etc+":匹配邮箱成功");
            }else {
                System.out.println(etc+":匹配失败");
            }
        }
    }
    
        /**
         * String 字符串支持正则表达式的相关方法之二:
         * String repleaseAll(String regex,String str)
         * 将当前字符串中,满足正则表达式的部分替换为给定字符串
         *
         */
        public class StringRepleaseAllDemo {
            public static void main(String[] args) {
                String string = "abc123def456hik";
                /*
                 * 将当前字符串中的数字部分替换为#NUMBER#
                 */
                string = string.replaceAll("[0-9]+", "#NUMBER#");
                //string = string.replaceAll("[0-9]", "#NUMBER#");
                //string = string.replaceAll("[a-z]+", "#char#");
                System.out.println(string);
    
                //用户输入信息 “礼貌” 河蟹
                //创建一个接受器
                Scanner scan = new Scanner(System.in);
                //构建匹配正则表达式
                String regex = "(wqnmlgb|nc|dsb|djb|mmp|tmd|nmsl|bitch|hmp|nmj)";
                System.out.println("输入框:");
                //将控制台输入的接受的到数据转换为小写
                String message = scan.next().toLowerCase();
                //匹配到正则表达式的字符串 替换为 ***  【河蟹神兽重出江湖啦~~】
                message = message.replaceAll(regex, "***");
                //输出信息
                System.out.println(message);
                
            }
        }
    
        /**
         * String 字符串支持正则表达式的相关方法之三:
         * String[] split(String regex)
         * 将当前字符串按照满足正则表达式的部分进行拆分,并返回
         * 拆分后的每段内容
         */
        public class StringSplitDemo {
            public static void main(String[] args) {
                String string = "abc123def456hik";
                /*
                 * 按照数字部分进行拆分,得到所有的字母部分
                 */
                String[] arr = string.split("[0-9]+");
                //String[] arr = string.split("[0-9]"); 每个数字截一段
                System.out.println(arr.length);
                System.out.println(Arrays.toString(arr));
                
                /* 上传文件统一重命名 :上传时间+文件后缀*/
                //假定一个上传的图片对象
                String imageName = "123.jpg";
                //按照 . 处进行拆分 得到一个 图片名称 和图片后缀的 字符串数组
                String[] names = imageName.split("\\.");
                //获取格林威治时间 将其与拆分的图片后缀组合 重命名操作 将其赋给imageName
                imageName = System.currentTimeMillis()+ "." + names[1];
                //输出图片名称
                System.out.println(imageName);
                
                ////按照 . 处进行拆分 得到一个 图片名称 和图片后缀的 字符串数组
                names = imageName.split("\\.");
                //记录图片的名称即上传时间
                long time = Long.parseLong(names[0]);
                //转化时间戳
                Date date = new Date(time);
                //输出时间戳
                System.out.println(date);
            }
        }
    

    注意:

    在正则表达式中 “ . ”表示匹配任意一个字符,使用文件后缀匹配“ . ”时, 要被转义,并且“ \ ”也要被转义,否则会报错即 "\\."

    0x03 java.lang.StringBuilder


    1. 构造方法
      • new StringBuilder() 创建一个不带任何字符的字符串生成器,其初始容量为16个字符
      • new StringBuilder(String str) 创建一个新的字符串生成器,并初始化为指定的字符串内容

    代码示例:

    //空的字符串引用
    StringBuilder str = new StringBuilder();
    //指定字符串引用
    StringBuilder str = new StringBuilder("hello world");
    
    1. 方法

      注意:

      以下方法可以直接使用,不用自建,但其使用大前提为导入相关类且存在字符串引用

      • int capacity() 返回此字符序列的容量,此时容量相当于字符序列的长度(length)
      • StringBuilder insert(int offset,Object anObject) 将anObject插入到此字符串中指定的offse处
      • StringBuilder append()以及重载的append(Object anObject) 将anObject 追加到字符序列(字符串)的末尾

      注意:anObject 代表众多的对象和变量 (包括但不限于boolean、char、char[]、String)等

      • StringBuilder delete(int start,int end) 移除此字符序列的从start位置开始到end结束的字符

    代码示例:

    public class StringBuilderMethodDemo {
        /**
         * StringBuilder 常用  API方法  演示
         * 1. StringBuilder 是可变字符串,其内部的字符数组容量初始为16,
         * 2. 后续的操作,都可以对这个数组内容进行修改,
         * 3. 当容量不过的时候,会自动进行扩容,扩容规则1倍+2
         * 
         * String对象中也封装了char数组,但是其数组内容在创建之后不可改变
         * 
         * 用于检测StringBuilder内部字符数组的容量,大于等于数组长度
         * .capacity()
         * 
         * 添加字符 在当前字符串的末尾
         * .append()
         * 
         * 从开始逐个往后按照索引,在指定位置删除字符
         * .delete()
         * 
         * 开始逐个往后按照索引,在指定位置插入字符
         * .insert()
         */
        public static void main(String[] args) {
            StringBuilderMethodDemo str = new StringBuilderMethodDemo();
            str.test();
        }
        public void test(){
            //创建一个空的字符序列
            StringBuilder str = new StringBuilder();
            //capacity 容量,就是StringBuilder中char数组大小
            //capacity() 方法用于检测StringBuilder内部字符数组的容量
            //由于当长度超过数组容量的时候,会进行自动扩容,
            //所以这个数组的容量总会大于等于数组长度
            int size = str.capacity();
            System.out.println(size);
            //追加字符串
            str .append("采蘑菇的小")
                .append("姑娘今天上山")
                .append("去采蘑菇的时候")
                .append("碰到了")
                .append("熊大");
            System.out.println(str);
            //记录容量(长度)
            size = str.capacity();
            System.out.println(size);
            //删除指定位置的字符
            str .delete(1,3)
                //插入指定字符
                .insert(1,"老师");
            System.out.println(str);
        }
    }
    

    相关文章

      网友评论

          本文标题:JavaSE常用API之String相关

          本文链接:https://www.haomeiwen.com/subject/thrjbqtx.html