Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于拆分字符串并在格式化后将其连接起来的方法_Java_String_Jsp_String Concatenation - Fatal编程技术网

Java 用于拆分字符串并在格式化后将其连接起来的方法

Java 用于拆分字符串并在格式化后将其连接起来的方法,java,string,jsp,string-concatenation,Java,String,Jsp,String Concatenation,我想拆分来自日志文件的字符串,格式化拆分的字符串,再次连接它,然后再次打印格式化的字符串。目前,代码只是一行一行地打印文件,而我想要的其余部分就剩下了 我的代码是: try { String strpath="/var/date.log"; FileReader fr = new FileReader(strpath); BufferedReader br = new BufferedReader(fr);

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

我的代码是:

   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());
  }

您可以使用Scanner和正则表达式来实现这一点

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/>" );
}
Pattern logPattern=Pattern.compile(“^\\[([^\\]]*)\\](.*)”;
扫描仪输入=新扫描仪(新文件(strpath));
while(input.hasNextLine()){
String line=input.nextLine();
//检查如何使用模式解析字符串(获取匹配器)并获取参数
out.println(第+行“
”); }

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

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

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

如果您的文件总是有这种类型,我认为这将帮助您

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));
公共静态长字符串tolong(字符串ch){
字符串temp=“”;

对于(int i=0;iIs您为什么要重新格式化已格式化的日志语句,而不是更改日志配置提供的格式?我想格式化它的日期,因为它仅为10位数字格式,它将更改为日期时间格式。我想我仍然不明白。您需要保留现有格式吗?如果不需要e现有格式,只需更新日志配置以提供所需的日期格式。我们如何更新日志配置?我正在jsp页面中使用我的代码…我需要为您的代码导入什么文件,并在格式化日期后打印该文件?我要格式化日志文件的所有日期此方法适用于所有日志文件吗ile还是只针对第一行?这当然适用于所有行:)你所需要做的就是把这些代码放在你的while循环中,假设你正在读取变量
中的每一行日志文件。只要保持
模式。在while循环之前编译
。@anubhava你是个了不起的人,它工作得非常出色,但它显示的是1970年??它显示的是1970年,因为你的日志文件中的时间戳是seconds不是Java
Date
类所期望的毫秒数。您需要将该数字乘以1000以显示正确的Java日期。请查看我的更新答案。我只希望它是“[Fri Aug 31 19:04:40 EDT 2001]LOG ROTATION:DAILY”,但想从中省略“EDT 2001”,那么我该怎么办??
[11-24-2011 00:00:00] LOG ROTATION: DAILY
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));