Способ разбиения строки и объединения ее после форматирования - PullRequest
3 голосов
/ 27 декабря 2011

Я хочу разделить строку из файла журнала, отформатировать разделенную строку, снова объединить ее, а затем снова распечатать отформатированную строку. В настоящее время код просто печатает файл построчно, а остальное, что мне нужно, остается.

Мой код:

   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 ]

1 голос
/ 28 декабря 2011

Вы можете использовать этот простой фрагмент кода для преобразования:

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 голос
/ 28 декабря 2011

Если ваш файл всегда имеет этот тип, я думаю, это поможет вам

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));
0 голосов
/ 28 декабря 2011

Вы можете использовать Сканер и регулярные выражения для этого.

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/>" );
}

И не забудьте правильно закрыть вход и выход.

...