第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何使用 java 搜索文件中存在的日期格式 20180603?

如何使用 java 搜索文件中存在的日期格式 20180603?

翻過高山走不出你 2023-02-23 10:06:59
我有一個(gè)文件,其中的單詞由“|”分隔。這里我需要搜索日期“20180603”。但是,我無法硬編碼要搜索的值。日期格式固定為 YYYYDDMM,日期可以是任何格式。我需要將此處顯示的日期轉(zhuǎn)換為今天的日期(系統(tǒng)日期)。我正在粘貼外部文件的外觀(只是我在相關(guān)值周圍添加了星號以強(qiáng)調(diào)):00000548|WILLIAM|HUBER|WH5718||N|**20180306**|SVP-TECHNICAL FIELD SERVICES|06|329000.00 |0.00 |0.00 |205440.00 |0.00 |0.00 |0.00 |0.00 |0.00 |55000.00 |0.00 |0.00 |0.00 |1600.00 |0.00 |0.00 |0.00 |0.00 |225502.08 |0.00 |0.00 |0.00 |27629.91 |36717.17 |0.00 |33.000 |0.000 |F00000828|NORBERTA|NOGUERA|NN1413||N|**20180306**|VP-SPECIAL PROJECTS|05|213000.00 |0.00 |88464.00 |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 |0.00 |86502.87 |0.00 |0.00 |0.00 |16811.41 |15023.40 |0.00 |33.000 |0.000 |F00001308|ERROL|PHIPPS|EP4499||N|00000548|WILLIAM|HUBER|WH5718||N|20180306|SVP-TECHNICAL FIELD SERVICES|06|329000.00 |0.00 |0.00 |205440.00 |0.00 |0.00 |0.00 |0.00 |0.00 |55000.00 |0.00 |0.00 |0.00 |1600.00 |0.00 |0.00 |0.00 |0.00 |225502.08 |0.00 |0.00 |0.00 |27629.91 |36717.17 |0.00 |33.000 |0.000 |F我嘗試了很多問題,但沒有運(yùn)氣。下面是我試過的代碼;public class ReadFile {    public static void main(String[] args) throws IOException {        File f1= new File("C:/Users/kumar.sushobhan/Desktop/ESPYTR_Big_file_EXEC.dat");        //File f1= new File("C:/Users/kumar.sushobhan/Desktop/h.txt");        String words[]= null;        FileReader fr= new FileReader(f1);        BufferedReader br= new BufferedReader(fr);        String s;        int c = 0;        String regex= "\\d{4}\\d{2}\\d{2}";        while((s= br.readLine())!=null)        {            words= s.split("|");            for(String word: words)            {                //System.out.println(word);                if(word.equals(regex))                {                    c++;                }            }        }        System.out.println(c);        fr.close();    }}我希望讀取快照中存在的日期并將其更改為當(dāng)前系統(tǒng)日期。
查看完整描述

2 回答

?
白衣非少年

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊

這是一個(gè)基本算法,它將在管道分隔文件中查找,將“看起來像”日期的值替換為當(dāng)前日期,然后將所有內(nèi)容寫回新文件。它使用YYYYDDMM您在問題中描述的格式,但它可能應(yīng)該是YYYYMMDD,我已經(jīng)注意到您需要在哪里進(jìn)行更改。這通過日期驗(yàn)證和錯(cuò)誤處理減少了一些角落,以盡量保持相對較短,但我過度評論以嘗試解釋所有內(nèi)容:


import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.time.LocalDate;

import java.time.format.DateTimeFormatter;

import java.util.regex.Matcher;

import java.util.regex.Pattern;


public class DateReplacer

{

    private static final Pattern DATE_MATCHER =

            Pattern.compile("(?:(?:19|20)[0-9]{2})([0-9]{2})([0-9]{2})");


    public static void main(String... args)

            throws Exception

    {

        // These are the paths to our input and output files

        Path input = Paths.get("input.dat");

        Path output = Paths.get("output.dat");


        // We need to get today's date in YYYYDDMM format, so we create a

        // DateFormatter for that. If it turns out that your date format is

        // actually YYYYMMDD, you can just use DateFormatter.BASIC_ISO_DATE

        // instead.

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyddMM");

        String todaysDate = LocalDate.now().format(formatter);


        // Use try-with-resources to create a reader & writer

        try (BufferedReader reader = Files.newBufferedReader(input);

             BufferedWriter writer = Files.newBufferedWriter(output)) {

            String line;


            // Read lines until there are no more lines

            while ((line = reader.readLine()) != null) {

                // Split them on the | character, notice that it needs to be

                // escaped because it is a regex metacharacter

                String[] columns = line.split("\\|");


                // Iterate over every column...

                for (int i = 0; i < columns.length; i++) {

                    // ... and if the value looks like a date ...

                    if (isDateLike(columns[i])) {

                        // ... overwrite with today's date.

                        columns[i] = todaysDate;

                    }

                }


                // Re-join the columns with the | character and write it out

                writer.write(String.join("|", columns));

                writer.newLine();

            }

        }

    }


    private static boolean isDateLike(String str)

    {

        // Avoid the regular expression if we can

        if (str.length() != 8) {

            return false;

        }


        Matcher matcher = DATE_MATCHER.matcher(str);

        if (matcher.matches()) {

            // If it turns out that your date format is actually YYYYMMDD

            // you will need to swap these two lines.

            int day = Integer.parseInt(matcher.group(1), 10);

            int month = Integer.parseInt(matcher.group(2), 10);


            // We don't need to validate year because we already know

            // it is between 1900 and 2099 inclusive

            return day >= 1 && day <= 31 && month >= 1 && month <= 12;

        }


        return false;

    }

}

此示例使用一條try-with-resources語句來確保正確關(guān)閉輸入和輸出文件。



查看完整回答
反對 回復(fù) 2023-02-23
?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

您可以使用如下正則表達(dá)式。

  String regex = "(19|20)[0-9][0-9](0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|30|31)";

它并不完美,但可以匹配大多數(shù)日期。例如,它將消除月份超過 12 的日期。此外,它適用于 2099 年之前的日期。它不處理像 6 月有 30 天這樣的日期規(guī)則。它將匹配天數(shù)在 1-31 之間的任何日期。

您不能用于equals日期。你將不得不使用Pattern.matches(regex, string)


查看完整回答
反對 回復(fù) 2023-02-23
  • 2 回答
  • 0 關(guān)注
  • 134 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號