[英]How to implement the template(replacing string with the element of list) in java.
我正在开发一个应用程序,其中遇到了需要用字符串替换识别词的需求,即替换模板中的实际数据。 在此,我从数组列表中获取数据,为此,我实现了以下解决方案。
List<String> abc = new ArrayList<String>();
abc.add("willy brown");
abc.add("jamster");
String message="//$^$// has commented on //$^$// .";
String messages[] = message.split(" ");
StringBuffer finalMessage = new StringBuffer();
for(int i=0,j=0; i<messages.length && j<=abc.size(); i++){
System.out.println("messages : " + messages[i]);
if(messages[i].equals("//$^$//")){
messages[i] = abc.get(j);
System.out.println("after changes " +messages[i]);
j++;
}
finalMessage.append(messages[i] +" ");
}
System.out.println("final message: " + finalMessage);
我只想知道是否有更好的方法来实现此功能,并且是否存在任何漏洞。
我将为此使用MessageFormat.format:
List<String> abc = new ArrayList<String>();
abc.add("willy brown");
abc.add("jamster");
String message = "{0} has commented on {1}";
String finalMessage = MessageFormat.format(message, abc.toArray(new String[abc.size()]));
System.out.println(finalMessage);
您可以使用内置的String和StringBuffer方法执行此任务,而不必将消息拆分为数组。 我还建议将字段标识符提取到一个单独的变量中。 上帝禁止你在某个地方错过它!
String fieldIdentifier = "//$^$//";
List<String> abc = new ArrayList<>();
abc.add("willy brown");
abc.add("jamster");
String message= fieldIdentifier + " has commented on " + fieldIdentifier + ".";
StringBuffer finalMessage = new StringBuffer(message);
int fieldCount = 0;
while(finalMessage.indexOf(fieldIdentifier) > -1) {
int index = finalMessage.indexOf(fieldIdentifier);
finalMessage = finalMessage.replace(index, index + fieldIdentifier.length(), abc.get(fieldCount));
fieldCount++;
}
System.out.println("final message: " + finalMessage);
编辑:对于这些类型的操作,最好使用StringBuffer,因为它可变并且比使用String快得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.