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不是JavaDate
类所期望的毫秒数。您需要将该数字乘以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));