私は次のことをしようとしています: 日付を含む残りの文字列に影響を与えずに、日付を数値形式から「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.
証明された結果についての助けをいただければ幸いです。ありがとう。