分割字符串并在格式化后连接它的方法

时间:2011-12-27 19:58:19

标签: java string jsp string-concatenation

我想拆分来自日志文件的字符串,格式化拆分字符串,再次连接它,然后再次打印格式化的字符串。目前,代码只是逐行打印文件,而我想要的其余部分仍然存在。

我的代码是:

   try                
   {
      String strpath="/var/date.log";
      FileReader fr = new FileReader(strpath);
      BufferedReader br = new BufferedReader(fr);
      String ch;
      String[] Arr;
      do 
      {
        ch = br.readLine();
        if (ch != null)
        out.print(ch+"<br/>");   
      } 
      while (ch != null);
      fr.close();
    }
    catch(IOException e){
    out.print(e.getMessage());
  }

日志文件的内容:

[1322110800] LOG ROTATION: DAILY
[1322110800] LOG VERSION: 2.0
[1322110800] CURRENT HOST STATE: arsalan.hussain;DOWN;HARD;1;CRITICAL - Host Unreachable (192.168.1.107)
[1322110800] CURRENT HOST STATE: localhost;UP;HARD;1;PING OK - Packet loss = 0%, RTA = 0.06 ms
[1322110800] CURRENT HOST STATE: musewerx-72c7b0;UP;HARD;1;PING OK - Packet loss = 0%, RTA = 0.27 ms
[1322110800] CURRENT HOST STATE: sharepoint2;DOWN;HARD;1;CRITICAL - Host Unreachable (192.168.1.100)

我想在“]”上每行拆分此文件,然后在方括号中获取内容,在长日期时间格式化,然后将其与剩余行连接并打印出来。

这应该在文件的每一行完成。

这将给出格式化日期:

String dat="1324649468000";
Date d = new Date(Long.valueOf(dat));

3 个答案:

答案 0 :(得分:1)

您可以使用此简单的代码段进行转换:

String line = "[1322110800] LOG ROTATION: DAILY";
Pattern pt = Pattern.compile("\\[(\\d+)\\]");
Matcher m = pt.matcher(line);
if (m.find()) {
    Date dt = new Date(Long.parseLong(m.group(1)) * 1000);
    SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
    line = m.replaceFirst('['+ sdf.format(dt) +']');
}

System.out.println(line);

<强>输出

[11-24-2011 00:00:00] LOG ROTATION: DAILY

答案 1 :(得分:1)

如果您的文件始终具有此类型,我认为这会对您有所帮助

public static long stringToLong(String ch) {              
    String temp="";
    for(int i=0;i<ch.length();i++)
   {
       if(ch.charAt(i)=='[')           
           continue;
       if(ch.charAt(i)==']')
           break;
       temp+=ch.charAt(i);       
   }
    return Long.valueOf(temp);
   }



Date d = new Date(stringToLong(ch));

答案 2 :(得分:0)

您可以使用扫描程序和正则表达式来执行此操作。

Pattern logPattern = Pattern.compile("^\\[([^\\]]*)\\](.*)$");
Scanner input = new Scanner( new File( strpath ) );
while ( input.hasNextLine() ) {
   String line = input.nextLine();
   // checkout how to parse a string with Pattern (obtain matcher) and get the arguments
   out.println( line + "<br/>" );
}

不要忘记正确关闭输入和输出。