Java 有没有办法找到以相同字符串显示的两个日期之间的数据并将其存储到json对象
我想获取对象中日期之后的字符串数据 示例输入:Java 有没有办法找到以相同字符串显示的两个日期之间的数据并将其存储到json对象,java,string,date,datetime,Java,String,Date,Datetime,我想获取对象中日期之后的字符串数据 示例输入: 2019-06-06 13:01:53.263Z | abc | alfkdjas | alfjdlaksd | alkjdfs 2019-06-06 13:01:53.264Z|lkjsfadfi|sadofuoif 2019-04-01 16:47:25.327Z |错误7816 输出: [{“日期”:“2019-06-06 13:01:53.263Z”,“数据”:“abc | ldskjf”},{“日期”:“2019-06-06 13:01:
2019-06-06 13:01:53.263Z | abc | alfkdjas | alfjdlaksd | alkjdfs
2019-06-06 13:01:53.264Z|lkjsfadfi|sadofuoif
2019-04-01 16:47:25.327Z |错误7816 输出: [{“日期”:“2019-06-06 13:01:53.263Z”,“数据”:“abc | ldskjf”},{“日期”:“2019-06-06 13:01:53.264Z”,“数据”:“lkjsfadfi”}] 意味着我要在第一个日期之后直到第二个日期到来 我试图在两个日期之间分离数据
public static String ReadData() {
BufferedReader reader;
try {
reader = new BufferedReader(new FileReader(logfilename));
String line = reader.readLine();
JSONArray jason=new JSONArray();
JSONObject jo=new JSONObject();
int count=0;
while (true) {
if(line != null) {
if(count>0) {
}
if(isValidDate(line.split("\\|")[0])) {
count++;
jo.put("date", line.split("\\|")[0]);
jo.put("data",line);
}
line = reader.readLine();
}else {
break;
}
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
此函数用于将我的日期与字符串分开
public static boolean isValidDate(String inDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss.ms");
try {
dateFormat.parse(inDate);
} catch (ParseException pe) {
return false;
}
return true;
}
输入:
2019-06-06 13:01:53.263Z | abc | ldskjf
2019-06-06 13:01:53.264Z | lkjsfadfi 输出:
[{"date":"2019-06-06 13:01:53.263Z","data":"|abc| ldskjf "},{"date":"2019-06-06 13:01:53.264Z","data":"|lkjsfadfi"}]
[{"date":"2019-06-06 13:01:53.263Z","data":"abc|alfkdjas|alfjdlaksd|alkjdfs"},{"date":"2019-06-06 13:01:53.263Z","data":"abc|al"}]
我这里有一个很大的日志文件,我想从该日志文件将该日志文件转换为JSON数组。改用子字符串
String res = "2019-06-06 13:01:53.263Z|abc|alfkdjas|alfjdlaksd|alkjdfs "
res0.substring(res0.indexOf('|')) // 2019-06-06 13:01:53.263Z
res0.substring(0,res0.indexOf('|'))// |abc|alfkdjas|alfjdlaksd|alkjdfs
用您创建的方法提取日期没有任何意义。该方法将返回一个
boolean
type对象(true或false)
通过稍微修改您的方法,您可以创建以下内容,从您提供的字符串示例中提取日期,并最终返回一个date
-类型的对象:
public static Date extractDate(String inDate) {
Date dt = null;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.ms");
try {
dt = dateFormat.parse(inDate);
}
catch (ParseException pe) {
pe.printStackTrace();
}
return dt;
}
用法:
Date myDate = extractDate("2019-06-0613:01:53.263Z|abc|alfkdjas|alfjdlaksd|alkjdfs");
输出:
[{"date":"2019-06-06 13:01:53.263Z","data":"|abc| ldskjf "},{"date":"2019-06-06 13:01:53.264Z","data":"|lkjsfadfi"}]
[{"date":"2019-06-06 13:01:53.263Z","data":"abc|alfkdjas|alfjdlaksd|alkjdfs"},{"date":"2019-06-06 13:01:53.263Z","data":"abc|al"}]
2019年6月6日星期四13:03:03英国夏令时
似乎您正在寻找以下内容 首先,您需要一种从文件中读取每一行的方法。(如果不是逐行,请让我知道。这是我从你的问题中理解的) 此方法将返回一个
ArrayList
,其中包含输入文件的每一行
public ArrayList<String> readAllLines(String filename){
//ArrayList to hold all the lines
ArrayList<String> lines = null;
//Get lines of text (Strings) as a stream
try (Stream<String> stream = Files.lines(Paths.get(filename))){
// convert stream to a List-type object
lines = (ArrayList<String>)stream.collect(Collectors.toList());
}
catch (IOException ioe){
System.out.println("\nCould not read lines of text from the file.\n" +
"Reason: parameter \"" + ioe.getMessage() + "\"");
}
catch (SecurityException se){
System.out.println("Could not read the file provided." +
"Please check if you have permission to access it.");
}
return lines;
}
然后,我们将使用一种方法将解析的每个字符串
转换为JSONObject
public JSONObject convertToJsonObject(String line){
//Convert String into an ArrayList, split by "|" delimiter
ArrayList<String> dataParts = new ArrayList<>(Arrays.asList(line.split("\\|")));
String date=null;
JSONObject jsonObj = new JSONObject();
//Get the date, wherever it might be in the String and remove it from the List
for(int i=0; i<dataParts.size(); i++){
if (isValidDate(dataParts.get(i))){
date = dataParts.get(i);
dataParts.remove(i);
break;
}
}
//Add the date with key "date"
jsonObj.put("date", date);
//Add the rest of the data, with key "data" (while preserving the order)
jsonObj.put("data", String.join("|", dataParts));
return jsonObj;
}
输出:
[{"date":"2019-06-06 13:01:53.263Z","data":"|abc| ldskjf "},{"date":"2019-06-06 13:01:53.264Z","data":"|lkjsfadfi"}]
[{"date":"2019-06-06 13:01:53.263Z","data":"abc|alfkdjas|alfjdlaksd|alkjdfs"},{"date":"2019-06-06 13:01:53.263Z","data":"abc|al"}]
如果日期总是第一次出现在每行中,那么最好使用String.substring()
方法来提取日期,就像@Luis Ramirez Monterosa在他的回答中所演示的那样
我的工作,假设日期可能在输入字符串的中间。< /P>不理解,你想提取什么数据?假设我有一个字符串2019-0606 13:01:53.263Z?ABC?AlfkdJas 2019-0606 13:01:53.264Z?LKJSFADFI我想在日期之间得到数据,意思是我想要数组[{日期]:“2019-0606 13:01:53.263Z”,“数据”:“| abc | alfkdjas | alfjdlaksd | alkjdfs”},{“日期”:“2019-06-06 13:01:53.264Z”,“数据”:“lkjsfadfi | sadofooif”}]你现在得到了@TechFree吗?我建议你不要使用
SimpleDateFormat
。这个类是出了名的麻烦和过时的。相反,使用DateTimeFormatter
和其他来自@Pushpak的类。你需要编辑你的问题、标题和想要的结果。但是,首先,你需要告诉我们问题的格式是什么您的输入是。是多个字符串、一个大字符串、文件中的文本吗?谢谢您的解决方案,但这就像静态解决方案,我的数据是动态的,因此您的解决方案可能无法工作。您是否有任何函数或任何其他解决方案?您的数据如何更改?如果您总是希望第一列上有日期,这是最好的。关于数据将如何改变?2019-06-06-06-06 13:01:01:00其他任何人对数据将如何改变数据有任何其他的澄清吗?2019-06-06-06 13:01:01:01:00其他任何其他任何关于数据将如何改变的澄清吗?2019-06-06-06(Oewewer-23)Oewwwrer-23)错误,误差,误差,误差,误差,关于数据将关于数据将如何如何数据将如何如何改变数据将如何改变数据将如何变化?其他任何其他任何其他任何其他的澄清。你们有任何其他任何其他的澄清。你们有任何其他任何其他任何其他的澄清。你们有任何其他关于数据将有任何其他关于数据将如何数据将如何数据将如何改变?数据将如何改变?数据将如何变化的澄清?2019?2019?2019?2019?2019?2019-06-06-06-06-06-06-06-06-06-06-06-06-06-06-06-06-06-06 13:01:53.263Z | dsafdds | sdfasdf |[kdjfalds-23]|错误| | | | | | | 6 | sdkjfhasdlfhasljkdf有数千行这样的数据,所以我无法将日期与它们的数据分开…正如我上面所说的那样…现在你明白我的意思了吗?它们不是由行尾字符分隔的吗?我想你是在读一个逗号分隔的文件、制表符或管道。逐行读,第一列n是日期。不是这样吗?请提供有关您试图解析的文件格式的详细信息我已经为日期做了…我只想在第一个日期之后…直到下一个日期…获取字符串数据。获取了吗?字符串str=”2019-06-06 13:01:53.263Z | abc | alfkdjas | alfjdlaksd | alkjdfs 2019-06-06 13:01:53.264Z | lkjsfadfi | sadofooif 2019-04-01 16:47:25.327Z | ERROR 7816“输出:[{“日期”:“2019-06-06-06 13:01:53.263Z”,“数据”:“abc | ldskjf”,{“日期”:“2019 06-06-06-06-06:01:53.264Z”,“数据”:”@这是一个完全不同的问题。您最初的问题本身并不清楚。请重新编写所有内容,并保持简单明了understandable@OleV.V.我只是复制了OP的方法主体,没有注意到他在一天中使用大写D。它应该是小写的D。编辑!非常感谢@P.SoutZikevich它对我有用:)