字符串替换问题

时间:2011-07-08 16:56:47

标签: java string replace java-6

我有什么:

我有一个文字"Hi {0}, my name is {1}."

我有List<String> names = Arrays.asList("Peter", "Josh");

我正在努力让彼得在{0}和Josh哪里有{1}。

我想要的是什么:

Hi Peter, my name is Josh.

我怎么能这样做?

7 个答案:

答案 0 :(得分:8)

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));

答案 1 :(得分:4)

可能最简单的方法是在循环中使用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或其它类似的形式不好,但通常文本替换此形式将是一种低频操作,因此简单性胜过效率。

答案 2 :(得分:1)

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));

答案 3 :(得分: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);

答案 4 :(得分:1)

你会做这样的事情。

List<String> names = Arrays.asList("Peter", "Josh");
System.out.printf("Hi %s, my name is %s.", names.get(0), names.get(1));

只需2行代码即可。

答案 5 :(得分:0)

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) + ".");

我很抱歉,如果我太过于字面意思,你想要更通用的东西,但这样做会完全按照你的要求行事。

答案 6 :(得分:0)

我假设您的列表中包含正确数量的元素。

`String s = "Hi {1}, my name is {2}.";`
for(int x = 1;x <= names.size();x++)
{
   s.replaceFirst("{" + x +"}",names.get(x - 1));
}