次のようなプロパティを持つプロパティ ファイル (myfile.prop) があります。
name=sara
address=${this.address}
this.address=Bangalore
url=${abc}/${cde}
abc=lolkata
cde=florida
nested=${${this.work}.file}
this.work=engg
engg.file=mywork
解決された値を取得するたびに、これらのプロパティを解決する必要があります。
そのコードは次のとおりです。
static String resolve(String str, Properties props, boolean isResolved)
{
if (props == null || str == null)
{
return str;
}
String expandedString = str;
String macroPattern = "(\\$\\{)([a-z.\\-A-Z0-9_]*)(\\})";
Pattern pattern = Pattern.compile(macroPattern);
Matcher m = null;
boolean pendingItems = true;
do
{
m = pattern.matcher(expandedString);
pendingItems = false;
String formerStr = expandedString;
while (m.find())
{
pendingItems = true;
String propVal = (String)props.get(m.group(2));
if (propVal == null)
{
propVal = m.group(0);
}
expandedString = expandedString.replace(m.group(0), propVal);
if (!fullyResolve)
{
return expandedString;
}
}
m.reset();
/* if the string did not change at all, it is a sign that this
* string cannot be resolved, just return */
if (expandedString.equals(formerStr))
{
return expandedString;
}
}
while (pendingItems);
return expandedString.trim();
}
しかし、それがしているのは値を返すことだけです....何が問題なのか教えてもらえますか?