0

私は次のことをしようとしています: 日付を含む残りの文字列に影響を与えずに、日付を数値形式から「EEEE、MMMM dd、yyyy」の形式に変換するクラスを作成します。

たとえば、「1978 年 9 月 6 日、本当にすばらしいことが起こった...」 (1 つの文に複数の日付が含まれている可能性があり、「31/31/88」や「11/&&/00」などの誤った日付が含まれている可能性もあります) " および "09/06/1988" のような日付) は "1978 年 9 月 6 日水曜日、本当にすばらしいことが起こった..." になるはずです。上記のサンプルに似た文がファイルに保存されていることに注意してください。このファイルには、1 行に 1 つ以上の文が含まれている可能性があります。日付は 1 行に複数表示できます。日付は不明です。また、1 行に無効な日付が含まれている可能性があります。(これで何をする必要があるかが明確になることを願っています。(ちなみに、以下で説明するように、「

「SimpleDateFormat」を使用して、単純な単一の数値日付から「EEEE、MMMM dd、yyyy」形式への変換を解決しましたが、正規表現を使用して文字列文を解析し、日付を見つけて、それを新しいフォーマット。変換を解決するために次のステートメントを使用したことに注意してください (非常に長いため、完全な解決策はリストしません)。

// format output EEEE, MM dd yyyy 
SimpleDateFormat write      = new SimpleDateFormat("EEEE, MMMM dd, yyyy");
SimpleDateFormat read       = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat readYy     = new SimpleDateFormat("MM/dd/yy");
SimpleDateFormat writeYyyy  = new SimpleDateFormat("MM/dd/yyyy");

// dates used for a test conversion     
String[] dates = {
"7/20/1969","7/4/2012",
"9/11/01",      // this should be 2001 (m/d/yyyy = 8 chars, mm/dd/yy = 8 chars
"02/29/1975", "6/11/1956", "31/31/00", "7/&&/88" }

今、私はうまくいくはずの解決策を見つけようとしていますが、何らかの理由でうまくいきません。次のコードを参照してください。

String line = "We landed on the moon on 7/20/1969. 7/4/2012 is the Fourth of July.";

// I expect to see "7/20/1969" and "7/20/2012" as output but the following does not
// work:

dateRegex = "^([1-9]|0[1-9]|1[012])/([1-9]|0[1-9]|[1-2][0-9]|3[01])/(\\d\\d)|(19|20)\\d\\d$";
Pattern p = Pattern.compile(dateRegex);
Matcher m = p.matcher(line);
System.out.println(line);

while(m.find()) {
    System.out.println("Found " + p + " at: " + m.start());
    // return the sequences characters matching "dateRegex (or so it should...?)
    System.out.println("Match : " + m.group())  // it does not print 'cause nothing is found
}
// the above code works find with a simpler regex string variable, but nothing like this
// what's worng here?   Is this a wrong "dateRegex" pattern?  Thanks.

証明された結果についての助けをいただければ幸いです。ありがとう。

4

1 に答える 1

0

String.Format() を使用しますか?

String.format("On %s, a really cool thing happened.", DateTimeFormatter.print()DateTime.now());

もちろん、この例でははるかに優れた Joda Time ライブラリを使用しています。そして、あなたもそうすべきです。

更新: 質問 (私が思うに) を適切に理解した後、標準の Java ライブラリを使用して開始する必要があります。

package com.company;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        String example = "On 9/6/78, a really cool thing happened...";
        SimpleDateFormat replacement = new SimpleDateFormat("EEEE, MMMM dd, yyyy");
        Pattern datePattern = Pattern.compile("\\b\\w{1,2}/\\w{1,2}/(?:\\w{4}|\\w{2})\\b");
        Date now = new Date();
        System.out.println(datePattern.matcher(example).replaceAll(replacement.format(now)));
    }
}
于 2013-10-17T13:38:32.390 に答える