2014-02-14 266 views
3

我想根據給定的模式生成一個字符串。讓我們假設:自定義圖案佈局

  • %i表示增量數
  • %.3r表示與3個字符
  • %dd隨機數是指當天
  • %mm表示當年當月
  • %yyyy表示

然後,例如

IBM_%.3r => IBM_233, IBM_765.. 
ID_%i => ID_0, ID_1, ID_2... 
%dd/%mm/%yyyy => 14/03/2014 
%dd%mm%yyyy_interface.log => 14022014_interface.log 

請讓我知道是否有任何現有的Java庫。否則,執行此操作的正確方法是什麼?

+0

沒有現成的庫來爲你做這個,我知道的。你試過什麼了?這些都是你希望能夠插入到字符串中的所有文物嗎?你試過什麼了? – Bex

+0

我對這樣的圖書館的所有搜索都是徒勞的。其次,沒有那些只是我想要插入到字符串中的最重要的工件。可以有很多。而且,%i和%r等都是樣本轉換字符。我不介意有任何信件。 –

回答

1

用它據我所知,沒有這樣的庫中。

但是你可以使用此代碼來代替:

CODE

public class RegexText { 
    static int i=0; 
    public static void main(String[] args) { 
     String lines[]={"IBM_%.3r", "ID_%i","%dd/%mm/%yyyy","%dd%mm%yyyy_interface_%i_%i.log","ID_%i"};  
     for(String line: lines){ 
      System.out.println(randomGenerate(line)); 
     } 
    } 

    public static boolean matches(String line, String regex){ 
     return line.matches(".*"+Pattern.quote(regex)+".*");  
    } 
    public static String randomGenerate(String line){ 
     Date date=new Date(); 
     int day=date.getDate(); 
     int month=date.getMonth()+1; 
     int year=date.getYear()+1900; 
     while(matches(line, "%i")) 
      line=line.replaceFirst("%i",""+(i++)); 
     while(matches(line, "%.3r")) 
      line=line.replaceFirst("%.3r",""+gen3DigitRand());  
     line=line.replaceAll("%dd",""+to2Digit(day)); 
     line=line.replaceAll("%mm",""+to2Digit(month)); 
     line=line.replaceAll("%yyyy",""+year);  
     return line; 

    } 

    public static int gen3DigitRand(){ 
     int num=0; 
     while(String.valueOf(num).length()!=3)   
      num=(int) (Math.random()*1000); 
     return num; 
    } 
    public static String to2Digit(int num){ 
     if(num<10) 
      return "0"+num; 
     return num+""; 

    } 
} 

輸出

IBM_904 
ID_0 
14/02/2014 
14022014_interface_1_2.log 
ID_3 
+0

非常感謝Sujith。這正是我想要的。 –

+0

@John史密斯:不客氣。 :) –

1

RandomStringUtils Apache的共同性有方法來生成一個給定長度的不同的字符串:

static String random(int count, String chars) 
static String randomAlphabetic(int count) 
static String randomAlphanumeric(int count) 
static String randomAscii(int count) 
static String randomNumeric(int count) 

可以結合java.util.Formatter