java 中使用正则表达式操作字符串

时间:2023-01-03 12:53:52

 

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestMain
{
    /**
     * arivate1
     * brivate1
     * crivate1
     * drivate
     * erivate
     * go go
     * kitty kitty
     */
    public static void main(String[] args) throws Exception
    {
        Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        String clipboardText = getClipboardText(systemClipboard);
        Pattern rule = Pattern.compile("[1-9]+\\.[0-9]+");
        Matcher matcher = rule.matcher(clipboardText);
//        System.out.println(matcher.matches());
//        System.out.println(matcher.groupCount());
        ArrayList<String> strs = new ArrayList<String>();
        Double total = 0.0;
        while (matcher.find()) {
            strs.add(matcher.group(0));            
        }
        System.out.println("加班时数: ");
        for (String s : strs){
            Double i = Double.parseDouble(s);
            System.out.print(i + ", ");
            total +=i;
        }
        System.out.println();
        System.out.println("加班总时数: " +total);
    }
    
    public static void test(){
        getStrings(); //用正则表达式获取指定字符串内容中的指定内容
        System.out.println("********************");
        replace(); //用正则表达式替换字符串内容
        System.out.println("********************");
        strSplit(); //使用正则表达式切割字符串
        System.out.println("********************");
        strMatch(); //字符串匹配
    }

    /*
     * Java中使用java.awt.datatransfer.Clipboard类来描述剪切板,并把剪切板分为两种类型:本地和系统, 
     * 本地剪切板使用 Clipborad cp = new Clipboard("clip1"); 来构造; 
     * 系统剪切板通过 Clipboard sysc =
     * Toolkit.getDefaultToolkit().getSystemClipboard(); 
     * 获取,下面我们给出几个常用的方法用于读写剪切板中的文本数据以及图像数据 1. 从指定的剪切板中获取文本内容
     */
    protected static String getClipboardText(Clipboard clip) throws Exception
    {
        // 获取剪切板中的内容
        Transferable clipT = clip.getContents(null);
        if (clipT != null)
        {
            // 检查内容是否是文本类型
            if (clipT.isDataFlavorSupported(DataFlavor.stringFlavor)) return (String) clipT.getTransferData(DataFlavor.stringFlavor);
        }
        return null;
    }

    // 2. 往剪切板写文本数据
    protected static void setClipboardText(Clipboard clip, String writeMe)
    {
        Transferable tText = new StringSelection(writeMe);
        clip.setContents(tText, null);
    }
    /**
     * 字符串匹配
     */
    private static void strMatch() {
        String phone = "13539770000";
        //检查phone是否是合格的手机号(标准:1开头,第二位为3,5,8,后9位为任意数字)
        System.out.println(phone + ":" + phone.matches("1[358][0-9]{9,9}")); //true    
        
        String str = "abcd12345efghijklmn";
        //检查str中间是否包含12345
        System.out.println(str + ":" + str.matches("\\w+12345\\w+")); //true
        System.out.println(str + ":" + str.matches("\\w+123456\\w+")); //false
    }

    /**
     * 使用正则表达式切割字符串
     */
    private static void strSplit() {
        String str = "asfasf.sdfsaf.sdfsdfas.asdfasfdasfd.wrqwrwqer.asfsafasf.safgfdgdsg";
        String[] strs = str.split("\\.");
        for (String s : strs){
            System.out.println(s);
        }        
    }

    /**
     * 用正则表达式获取指定字符串内容中的指定内容
     */
    private static void getStrings() {
        String str = "rrwerqq84461376qqasfdasdfrrwerqq84461377qqasfdasdaa654645aafrrwerqq84461378qqasfdaa654646aaasdfrrwerqq84461379qqasfdasdfrrwerqq84461376qqasfdasdf";
        Pattern p = Pattern.compile("qq(.*?)qq");
        Matcher m = p.matcher(str);
        ArrayList<String> strs = new ArrayList<String>();
        while (m.find()) {
            strs.add(m.group(1));            
        } 
        for (String s : strs){
            System.out.println(s);
        }        
    }

    /**
     * 用正则表达式替换字符串内容
     */
    private static void replace() {
        String str = "asfas5fsaf5s4fs6af.sdaf.asf.wqre.qwr.fdsf.asf.asf.asf";
        //将字符串中的.替换成_,因为.是特殊字符,所以要用\.表达,又因为\是特殊字符,所以要用\\.来表达.
        str = str.replaceAll("\\.", "_");
        System.out.println(str);        
    }

}