解决方案 »

  1.   

    public static void main(String[] args) throws Exception { String find = "_(\\d{8}.*?)\\.csv"; 
    Pattern p = Pattern.compile(find);
    Matcher matcher = p.matcher("[hostid]_[processid]_20150505_121315_456_01.csv[hostid]_[processid]_20150505_121315_456_02.csv");
    while (matcher.find()) {
    System.out.println(matcher.group(1));
    } }
      

  2.   

    public static void main(String[] args) throws Exception { String find = "_(\\d{8}.*?)\\.csv"; 
    Pattern p = Pattern.compile(find);
    Matcher matcher = p.matcher("[hostid]_[processid]_20150505_121315_456_01.csv[hostid]_[processid]_20150505_121315_456_02.csv");
    while (matcher.find()) {
    System.out.println(matcher.group(1));
    }
    System.out.println("-----------");

    String s="[hostid]_[processid]_20150505_121315_456_01.csv";
    System.out.println(s.substring(s.indexOf("_",s.indexOf("_", 1)+1)+1, s.lastIndexOf(".")));
    System.out.println("-----------");
    System.out.println(s.replaceAll(".*_(\\d{8}.*?)\\.csv", "$1"));
    }
      

  3.   

    赞同。不过看情况,有时候正则方便,有时候格式固定,直接截取会高效。
    LZ可以试试,直接截取和正则表达式获取,分别循环10000次同样的字符串,看看哪个耗时少。public class PatternTest { public static void main(String[] args) {
    testPattern();
    testSubStr();
    } // 1w次正则表达式操作耗时
    public static void testPattern() {
    String str = "[hostid]_[processid]_20150505_121315_456_01.csv"; String find = "_(\\d{8}.*?)\\.csv";
    Pattern p = Pattern.compile(find); long curMillis = System.currentTimeMillis();
    for (int i = 0; i < 10000; i++) {
    Matcher matcher = p.matcher(str);
    while (matcher.find()) {
    String result = matcher.group(1);
    // System.out.println(matcher.group(1));
    }
    }
    System.out.println("testPattern cost (ms):"
    + (System.currentTimeMillis() - curMillis));
    } // 1w次字符串操作耗时
    public static void testSubStr() {
    String str = "[hostid]_[processid]_20150505_121315_456_01.csv"; long curMillis = System.currentTimeMillis();
    for (int i = 0; i < 10000; i++) {
    StringBuilder sBuilder = new StringBuilder(str);
    sBuilder.delete(0, sBuilder.indexOf("_") + 1);
    sBuilder.delete(0, sBuilder.indexOf("_") + 1);
    String result = sBuilder.substring(0, sBuilder.indexOf("."));
    // System.out.println(result);
    }
    System.out.println("testSubStr cost (ms):"
    + (System.currentTimeMillis() - curMillis));
    }
    }