• java 字符串与正则表达式


    1.String 对象是不可变的,每个试图修改String值得方法,实际上都是创建了一个全新的String对象。

    public class StringTest {
        public static String upcase(String s){
            return s.toUpperCase();
        }
        public static void main(String[] args){
            String q = "one";
            System.out.println(q);
            String qq = upcase(q);
            System.out.println(qq);
            System.out.println(q);
        }
    }

    运行结果

    2.重载+与StringBuilder

    String对象是不可变的,所以在字符串实现+的时候,编辑器创建了一个StringBuilder对象,用以构造最终的String,并且为每个字符串调用一次StringBuilder的append()方法。关于用+和StringBuilder的效率问题。

    package demo4;
    
    public class TestStringBuilder {
        public String f1(String[] fields){
            long startTime = System.currentTimeMillis();
            String result = "";
            for (int j = 0; j < 1000; j++) {
                for (int i = 0; i < fields.length; i++) {
                    result += fields[i];
                }
            }
            long endTime = System.currentTimeMillis();
            System.out.println("用时:" + (endTime - startTime) + "ms"); //输出程序运行时间
            return result;
        }
    
        public String f2(String[] fields){
            long startTime = System.currentTimeMillis();
            StringBuilder result = new StringBuilder();
            for (int j = 0; j < 1000; j++) {
                for (int i = 0; i < fields.length; i++) {
                    result.append(fields[i]);
                }
            }
            long endTime = System.currentTimeMillis();
            System.out.println("用时:" + (endTime - startTime) + "ms"); //输出程序运行时间
            return result.toString();
        }
    
        public static void main(String[] args){
            TestStringBuilder t1 = new TestStringBuilder();
            String[] a = {"aaa","bbbb","ccccc","ddddd","eeeeeeeeeeeee","ffffffffggggggufguyftydjytdrtsdtrstrsresffffffffffff"};
            t1.f1(a);
            t1.f2(a);
        }
    }

    运行结果

    结果显而易见,用StringBuilder的效率要比+的效率高出很多,究其原因就是每一次的+操作其实等于new StringBuilder,而程序在for循环中的运行的时候每次都会new 一个StringBuilder,而f2()方法只生成了一个StringBuilder对象,显式地创建StringBuilder还允许预先为其指定大小,如果已经知道最终的字符串大概有多长,那预先指定StringBuilder的大小可以避免多次重新分配缓冲。

    3.正则表达式

     检查一个String是否匹配一个正则

    package demo4;
    
    public class IntegerMatch {
        public static void main(String[] args){
            System.out.println("-1234".matches("-?\d+"));
            System.out.println("5678".matches("-?\d+"));
            System.out.println("+911".matches("-?\d+"));
            System.out.println("+911".matches("(-|\+)?\d+"));
        }
    }

    运行结果:

    String类还自带一个非常有用的正则表达式工具-split()方法,其功能是“将字符串从政策表达式匹配的地方切开”。

    package demo4;

    import java.util.Arrays;

    public class Splitting {
    public static String knight = "Then When you have found the shrubbery,you must cut down the mightiest three in the forest...with...a herring";
    public static void split(String regex){
    System.out.println(Arrays.toString(knight.split(regex)));
    }
    public static void main(String[] args){
    split(" ");
    split("\W+");
    }
    }

    运行结果

    第一句:用普通字符作为正则表达式,第一个只是按照空格划分字符串

    第二句:将标点字符删除了

    4.Pattern和Matcher

    package demo4;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class TestRegularExpression {
        public static void main(String[] args){
            String[] str = {"abcabcabcdefabc", "abc+", "(abc)+","(abc){2,}"};
            args = str;
            TestRegularExpression t = new TestRegularExpression();
            if (args.length<2){
                System.out.println("Usage:
    java TestRegularExpression characterSequence regularExpression+");
                System.exit(0);
            }
    
            System.out.println("Input:""+args[0]+""");
            for (String arg:args){
                System.out.println("Regular expression :""+arg+""");
                Pattern p = Pattern.compile(arg);
                Matcher m = p.matcher(args[0]);
                while (m.find()){
                    System.out.println("Match""+m.group()+""at positions"+m.start()+"-"+(m.end()-1));
                }
            }
        }
    }

    运行结果:

    Pattern对象表示编译后的正则表达式。使用一边以德Pattner对象上的matcher()方法,加上一个输入字符串,从而共同构造了一个Macther对象。

  • 相关阅读:
    JS 正则查找与替换
    MySQL 批量插入值
    Python/Django 批量下载Excel
    Python/Django 下载Excel2007
    Python/Django 下载Excel2003
    Python3安装Scrapy
    服务器响应状态码
    细说同域-同父域-跨域
    细说Ajax跨域
    PostgreSQL学习
  • 原文地址:https://www.cnblogs.com/xiayq/p/10507946.html
Copyright © 2020-2023  润新知