আমি এটির একটি ছোট পরীক্ষা প্রয়োগ একত্রিত করেছিলাম। মূল ধারণাটি হ'ল format
ফর্ম্যাট স্ট্রিং, এবং বস্তুর মানচিত্র এবং স্থানীয়ভাবে তাদের নামগুলি কল করা এবং পাস করা।
নিম্নলিখিত ফলাফল আউটপুট হয়:
আমার কুকুরটির নাম ফিদো, এবং জেন ডো তার মালিক।
public class StringFormatter {
private static final String fieldStart = "\\$\\{";
private static final String fieldEnd = "\\}";
private static final String regex = fieldStart + "([^}]+)" + fieldEnd;
private static final Pattern pattern = Pattern.compile(regex);
public static String format(String format, Map<String, Object> objects) {
Matcher m = pattern.matcher(format);
String result = format;
while (m.find()) {
String[] found = m.group(1).split("\\.");
Object o = objects.get(found[0]);
Field f = o.getClass().getField(found[1]);
String newVal = f.get(o).toString();
result = result.replaceFirst(regex, newVal);
}
return result;
}
static class Dog {
public String name;
public String owner;
public String gender;
}
public static void main(String[] args) {
Dog d = new Dog();
d.name = "fido";
d.owner = "Jane Doe";
d.gender = "him";
Map<String, Object> map = new HashMap<String, Object>();
map.put("d", d);
System.out.println(
StringFormatter.format(
"My dog is named ${d.name}, and ${d.owner} owns ${d.gender}.",
map));
}
}
নোট: আনহ্যান্ডেল ব্যতিক্রমের কারণে এটি সংকলন করে না। তবে কোডটি পড়া সহজ করে তোলে।
এছাড়াও, আমি পছন্দ করি না যে আপনাকে কোডটিতে মানচিত্রটি নিজেই তৈরি করতে হবে, তবে স্থানীয় ভেরিয়েবলের নামটি কীভাবে অগ্রগতিতে নেওয়া যায় তা আমি জানি না। এটি করার সর্বোত্তম উপায় হ'ল এটি তৈরি করার সাথে সাথে মানচিত্রটিতে রাখা উচিত।
নীচের উদাহরণটি আপনার উদাহরণ থেকে ফলাফলগুলি তৈরি করে:
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
Site site = new Site();
map.put("site", site);
site.name = "StackOverflow.com";
User user = new User();
map.put("user", user);
user.name = "jjnguy";
System.out.println(
format("Hello ${user.name},\n\tWelcome to ${site.name}. ", map));
}
আমার আরও উল্লেখ করা উচিত যে বেগটি কী তা আমার কোনও ধারণা নেই, তাই আমি আশা করি এই উত্তরটি প্রাসঙ্গিক।
String.format("Hello %s", username);