2つの平行なベクトルを格納するのではなく、この目的のためにデータ構造Map
を使用することをお勧めします。なんらかの理由でファイルから要素の順序を保持する必要がある場合は、LinkedHashMap
を使用できます。例:次に
Map<String, String> regexesByName = new LinkedHashMap<>();
for (String line : linesFromFile) {
int index = line.indexOf(':');
if (index < 0) {
throw new IllegalArgumentException("Cannot parse: " + line);
}
String name = line.substring(0, index);
String regex = line.substring(index + 1);
regexesByName.put(name, regex);
}
は、すべての名前/正規表現のペアを列挙するために、あなたが行うことができます:
for (Map.Entry<String, String> entry : regexesByName.entrySet()) {
// entry.getKey() is the name, entry.getValue() is the regex
}
を、与えられた名前のための正規表現をルックアップするために、ちょうど行います
String regex = regexesByName.get(name);
後で正規表現をコンパイルしたPattern
オブジェクトに変換するだけであれば、それも簡単に実行できます。
Map<String, Pattern> compiledRegexesByName = new LinkedHashMap<>();
for (Map.Entry<String, String> entry : regexesByName.entrySet()) {
compiledRegexesByName.put(
entry.getKey(), Pattern.compile(entry.getValue()));
}
「ベクター」はなぜ特別にしたいですか?これは 'Map'にとってより良い仕事のようです。 –
は良いアイデアだと思われますが、私は正規表現で別のことを行うためにベクターを必要とし、後で正規表現をベクトルの同じ位置にあるJava正規表現に変換します。ありがとうございました –
既存のベクトルの値の型を(型安全性を失うように)変更するのではなく、新しい型を正しい型で作成することをお勧めします。あなたがそうするならば、地図を使うことも同様に働きます。私は私の答えに以下の例を追加しました。 –