ファイルを 1 行ずつ調べて、各行を 4 つの正規表現の 1 つと照合しようとする Java プログラムがあります。一致した式に応じて、プログラムは特定のアクションを実行します。ここに私が持っているものがあります:
private void processFile(ArrayList<String> lines) {
ArrayList<Component> Components = new ArrayList<>();
Pattern pattern = Pattern.compile(
"Object name\\.{7}: (.++)|"
+ "\\{CAT=([^\\}]++)\\}|"
+ "\\{CODE=([^\\}]++)\\}|"
+ "\\{DESC=([^\\}]++)\\}");
Matcher matcher;
// Go through each line and see if the line matches the any of the regexes
// defined
Component currentComponent = null;
for (String line : lines) {
matcher = pattern.matcher(line);
if (matcher.find()) {
// We found a tag. Find out which one
String match = matcher.group();
if (match.startsWith("Obj")) {
// We've got the object name
if (currentComponent != null) {
Components.add(currentComponent);
}
currentComponent = new Component();
currentComponent.setName(matcher.group(1));
} else if (currentComponent != null) {
if (match.startsWith("{CAT")) {
currentComponent.setCategory(matcher.group(2));
} else if (match.startsWith("{CODE")) {
currentComponent.setOrderCode(matcher.group(3));
} else if (match.startsWith("{DESC")) {
currentComponent.setDescription(matcher.group(4));
}
}
}
}
if (currentComponent != null) {
Components.add(currentComponent);
}
}
ご覧のとおり、4 つの正規表現を 1 つにまとめ、正規表現全体を行に適用しました。一致が見つかった場合は、文字列の先頭をチェックして一致した式を特定し、グループからデータを抽出します。コードの実行に興味がある方のために、いくつかのサンプル データを以下に示します。
Object name.......: PMF3800SN
Last modified.....: Wednesday 9 November 2011 11:55:04 AM
File offset (hex).: 00140598 (Hex).
Checksum (hex)....: C1C0 (Hex).
Size (bytes)......: 1,736
Properties........: {*DEVICE}
{PREFIX=Q}
{*PROPDEFS}
{PACKAGE="PCB Package",PACKAGE,1,SOT-323 MOSFET}
{*INDEX}
{CAT=Transistors}
{SUBCAT=MOSFET}
{MFR=NXP}
{DESC=N-channel TrenchMOS standard level FET with ESD protection}
{CODE=1894711}
{*COMPONENT}
{PACKAGE=SOT-323 MOSFET}
*PINOUT SOT-323 MOSFET
{ELEMENTS=1}
{PIN "D" = D}
{PIN "G" = G}
{PIN "S" = S}
私のコードは機能しますが、後で startsWith ルーチンを呼び出すときに、文字列の一部を繰り返すという事実が気に入りません。
他の人がこれをどのように書いたのか知りたいです。
アムル