0

誰かがこれで私を助けてくれることを願っています..または少なくとも私を正しい方向に向けてください。

まず、次のような名前のファイルがたくさんあります。

vendor.2012-07-25
vendor.2012-07-25 2
ven_dor.2012-05-18
ven_dor.2012-05-18 2

基本的には、ベンダー名 (1 語の場合もあれば、アンダースコアを付けて 2 語の場合もあります) + (ピリオド ".") + (年) + (月) + (日) です。年、月、日は (-) で区切ります。日付の後に 2/3/4 などで示される、同じ名前の複数のファイルの可能性があります。

file.getName(); を実行して、これらを文字列として取得します。ここで、「file」は JFileChooser から選択されたファイルです

次に、日付に基づいてデータの一部をグラフ化する必要があります。最初のファイル名の文字列を "." で分割する必要がありますか? 最初に、ベンダーと日付を分離してから、残りの部分を「-」で分割/分割して、年/月/日の個々の値を取得しますか?

これは正規表現の可能性があると思っていましたが、その分野ではかなり弱いので、二重分割が思いつきました。誰にも意見や提案がありますか?ありがとう!

4

4 に答える 4

3

実際、正規表現を使用できます:

String s = "vendor.2012-07-25 2";
Pattern p = Pattern.compile("([^.]+)\\.(\\d{4})-(\\d{2})-(\\d{2}) ?(\\d?)");
Matcher m = p.matcher(s);
if (m.find()) {
  String vendorName = m.group(1);
  String year = m.group(2);
  String month = m.group(3);
  String day = m.group(4);
  String multipleFiles = m.groupCount() > 4 ? m.group(5) : "";
  System.out.printf("%s %s %s %s %s", vendorName, year, month, day, multipleFiles);
}

括弧で囲まれた各式はキャプチャ グループ()と呼ばれ、基本的に正規表現エンジンにその内容を保存して、後で取得できるように指示します。

要約すると、各キャプチャ グループの機能は次のとおりです。

  1. ([^.]+)- ドット ( .) 以外のすべて。つまり、基本的にベンダー名の部分をキャプチャしています。
  2. (\\d{4})-\d数字に一致します。数字 (年) に\d{4}一致します。4
  3. (\\d{2})- 月;
  4. (\\d{2})- 日;
  5. (\\d?)- オプションの ( ?) 最後の桁に一致します。

日付部分をインスタンスとして解析するjava.Util.Date場合は、単一のキャプチャ グループを使用して、次を使用できますSimpleDateFormat

Pattern p = Pattern.compile("([^.]+)\\.(\\d{4}-\\d{2}-\\d{2}) ?(\\d?)");
Matcher m = p.matcher(s);
if (m.find()) {
  String vendorName = m.group(1);
  String dateString = m.group(2);
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  String multipleFiles = m.groupCount() > 2 ? m.group(3) : "";
}
于 2012-08-28T23:45:47.123 に答える
1
  • String.split.(おそらくエスケープが必要になります)。またはのdotSplitString[1]後の部分としてvendor.ven_dor.
  • その部分をスペース( )で分割しspaceSplitStringます。
  • を使用して最初の部分を解析しDateFormat.parse(String)Date
  • (の) 2 番目の部分spaceSplitStringが存在する場合は、Integer.parseInt(spaceSplitString[1])
于 2012-08-28T23:45:33.150 に答える
0

私は自分のコードで StringTokenizers をよく利用する傾向があります。上記の例をトークン化するには、次のようなものを使用できます。

StringTokenizer tok = new StringTokenizer(filename,".-"); // '.' で両方をトークン化します と '-'
文字列名 = tok.nextToken();
int year = Integer.parseInt(tok.nextToken());
int month = Integer.parseInt(tok.nextToken());
int day = Integer.parseInt(tok.nextToken());
int cnt = 1; //デフォルトでファイルの 1 つのコピー
if(tok.hasMoreTokens()){
     cnt = Integer.parseInt(tok.nextToken());
}

...等々。

ただし、素人にはわかりにくいという理由だけでなく、上記の正規表現ソリューションの使用を推奨します。完全を期すために、ここにこれを含めます。

于 2012-08-29T00:16:58.743 に答える
0

Java API 文字列トークナイザー クラス

あなたができることは次のとおりです。

tokenizer = new StringTokenizer(file.getName(), ".");
tokenizer.nextElement();

画像を取得するか、スキャナーを使用して解析することもできます

于 2012-08-28T23:47:04.950 に答える