是)我有的:
我有一个文本"Hi {0}, my name is {1}."
我有一个List<String> names = Arrays.asList("Peter", "Josh");
我试图让 Peter 适合有 {0} 的地方,而 Josh 适合有 {1} 的地方。
我想要的是:
Hi Peter, my name is Josh.
关于我该怎么做的任何想法?
MessageFormat 类是你的朋友。http://download.oracle.com/javase/1.5.0/docs/api/java/text/MessageFormat.html
String aa = "Hi {0}, my name is {1}";
Object[] bb = {"Peter" , "John"};
System.out.println(MessageFormat.format(aa, bb));
可能最简单的方法是在循环中使用其中一个 String.replaceXX 操作。例如,
String sourceString = "Hi {1}, my name is {2}."
for (i = 0; i < names.size(); i++) {
String repText = names.get(i);
sourceString = sourceString.replace("{" + (i+1) + "}", repText);
}
这有点低效,因为与使用 StringBuffer 或类似的方法相比,重复创建新字符串是一种糟糕的形式,但通常这种形式的文本替换将是一种低频操作,因此简单性胜过效率。
List<String> names = new ArrayList<String();
names.add("Peter");
names.add("Josh");
String str = "Hi {1}, my name is {2}.";
str = str.replaceFirst("{1}", names.get(0));
str = str.replaceFirst("{2}", names.get(1));
String text = "Hi {1}, my name is {2}.";
java.util.List<String> names = Arrays.asList("Peter", "Josh");
for(String s: names) text = text.replace("{" + (names.indexOf(s) + 1) + "}", s);
你会做这样的事情。
List<String> names = Arrays.asList("Peter", "Josh");
System.out.printf("Hi %s, my name is %s.", names.get(0), names.get(1));
只需两行代码就可以了。
List<String> names = new ArrayList<String>();
names.add("Peter");
names.add("Josh");
System.out.println("Hi " + names.get(0) + ", my name is " + names.get(1) + ".");
我很抱歉,如果我太从字面上理解你并且你想要更通用的东西,但这会完全按照你的要求做。
我假设您的列表将包含正确数量的元素。
`String s = "Hi {1}, my name is {2}.";`
for(int x = 1;x <= names.size();x++)
{
s.replaceFirst("{" + x +"}",names.get(x - 1));
}