私はUML2ジェネレータを使用してmodel.xmlからUMLファイルを生成しました。Javaは文字列内の複数の部分文字列を正規表現で置き換えます
ここでは、xmi:id = "generated id"で作成された生成されたIDを置き換えたいとします。
以下は、生成されたUMLコードのスニペットです。
<packagedElement xmi:type="uml:Package" xmi:id="_lAAK0A34Eeap1Y_jd5mZDA" name="java">
<packagedElement xmi:type="uml:Package" xmi:id="_lAAK0Q34Eeap1Y_jd5mZDA" name="lang">
<packagedElement xmi:type="uml:DataType" xmi:id="_lAAK0g34Eeap1Y_jd5mZDA" name="String"/>
<packagedElement xmi:type="uml:DataType" xmi:id="_lAAK0w34Eeap1Y_jd5mZDA" name="Boolean"/>
<packagedElement xmi:type="uml:DataType" xmi:id="_lAAK1A34Eeap1Y_jd5mZDA" name="Byte"/>
<packagedElement xmi:type="uml:DataType" xmi:id="_lAAK1Q34Eeap1Y_jd5mZDA" name="Character"/>
<packagedElement xmi:type="uml:DataType" xmi:id="_lAAK1g34Eeap1Y_jd5mZDA" name="Double"/>
<packagedElement xmi:type="uml:DataType" xmi:id="_lAAK1w34Eeap1Y_jd5mZDA" name="Float"/>
<packagedElement xmi:type="uml:DataType" xmi:id="_lAAK2A34Eeap1Y_jd5mZDA" name="Integer"/>
<packagedElement xmi:type="uml:DataType" xmi:id="_lAAK2Q34Eeap1Y_jd5mZDA" name="Long"/>
<packagedElement xmi:type="uml:DataType" xmi:id="_lAAK2g34Eeap1Y_jd5mZDA" name="Short"/>
</packagedElement>
</packagedElement>
私は正規表現を使用してIDを削除しようとしました。最初にファイルを読み込んで文字列に変換し、Matcherでパターンを見つけて置き換えようとします。 1つの問題は、ジェネレートされたIDが類似しているが同じではないことと、これに対処する方法がわからないことです。私はこれが最初にかかるため動作しないと思いますか?
Path path = profileFile.toPath();
Charset charset = StandardCharsets.UTF_8;
String replaceString = "";
String content = new String(Files.readAllBytes(path), charset);
Pattern pattern = Pattern.compile("xmi:id=\"([A-Za-z0-9_]*)\"");
Matcher matcher = pattern.matcher(content);
if (matcher.find())
{
replaceString = matcher.group(0);
Pattern p = Pattern.compile("\"([^\"]*)\"");
Matcher m = p.matcher(replaceString);
if (m.find())
{
System.out.println("is this the real life: " + m.group(1));
replaceString = m.group(1);
}
}
// content = content.replaceAll("xmi:id=\"([A-Za-z0-9_]*)\"", "xmi:id=\"\"");
content = content.replaceAll(replaceString, "");
Files.write(path, content.getBytes(charset));
あなたは正しい方向に私を少しでも向けることができます。私の脳は今は少しぼやけている。
質問には希望の出力を含める必要があります。 –
if(matcher.find())をwhile(matcher.find())に変更する – markbernard
if(m.find())の中で 'content = content.replaceAll(replaceString、" ");'を実行すると、 ' – markbernard