पर प्रतिस्थापित करता है, मैं एक नए प्रारूपित पेड़ पर नोड्स का अनुवाद करने की कोशिश कर रहा हूं, और मुझे सही जगह बदलने में परेशानी हो रही है।जावा एकाधिक एक ही पास
"(1:" : "(30:"
",1:" : ",30:"
"(30:" : "(6:"
",30:" : ",6:"
और पेड़:: मैं HashMap
है कहो
(30:0.07,(1:0.06,2:0.76))
परम्परागत ज्ञान सुझाव है कि कई replaceAll
, लेकिन यह एक समस्या बन गया है:
replaceAll("(1:", "(30:") >> (30:0.07,(30:0.06,2:0.76))
replaceAll("(30:", "(6:") >> (6:0.07,(6:0.06,2:0.76))
समस्या यहाँ हम है पहले एक प्रतिस्थापित किया गया था जो एक नोड बदल दिया। सही पेड़ दिखना चाहिए:
(6:0.07,(30:0.06,2:0.76))
अब मैं पहले से ही अजगर में यह कर दिया है:
def multiple_replace(taxa, text):
regex = re.compile("|".join(map(re.escape, taxa.keys())))
return regex.sub(lambda mo: taxa[mo.group(0)], text)
लेकिन मैं अपने जावा कार्यान्वयन में परेशानी आ रही:
private String convertTree (String treeOld, HashMap<String, String> conv) {
Pattern pattern = Pattern.compile("\\(\\d+:|,\\d+:");
Matcher matcher = pattern.matcher(treeOld);
StringBuilder sbt = new StringBuilder(treeOld);
while (matcher.find()) {
String replace = conv.get(matcher.group());
System.out.println(matcher.group() + "||" +replace + " || " + matcher.start() + ":"+matcher.end());
sbt.delete(matcher.start(), matcher.end());
sbt.insert(matcher.start(), replace);
}
return treeOld;
}
जबकि प्रतिस्थापन काम पर प्रतीत होता है, मैं इंडेक्सिंग को तारों के विभिन्न आकारों के साथ बिल्कुल सही नहीं कर सकता (जैसा कि उदाहरण में दिखाया गया है)। जावा में ऐसा करने का कोई तरीका है?
मेरे प्रयास से ज्यादा क्लीनर, बहुत बहुत धन्यवाद! – Darkstarone