Проблема замены строки - PullRequest
0 голосов
/ 08 июля 2011

Что у меня есть:

У меня есть текст "Hi {0}, my name is {1}."

У меня есть List<String> names = Arrays.asList("Peter", "Josh");

I 'я пытаюсь уместить Питера, где есть {0}, и Джоша, где есть {1}.

Что я хочу:

Hi Peter, my name is Josh.

Есть идеи, как мне это сделать?

Ответы [ 7 ]

8 голосов
/ 08 июля 2011

Класс 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));
4 голосов
/ 08 июля 2011

Вероятно, проще всего было бы использовать один из операций 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 или чего-то подобного, но обычно замена текста этой формы будет низкочастотной операцией, поэтому простота превосходит эффективность.

1 голос
/ 09 июля 2011

Вы бы сделали что-то подобное.

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

и это всего лишь 2 строки кода.

1 голос
/ 08 июля 2011
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);
1 голос
/ 08 июля 2011
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));
0 голосов
/ 08 июля 2011

Я предполагаю, что в вашем списке будет правильное количество элементов.

`String s = "Hi {1}, my name is {2}.";`
for(int x = 1;x <= names.size();x++)
{
   s.replaceFirst("{" + x +"}",names.get(x - 1));
}
0 голосов
/ 08 июля 2011
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) + ".");

Приношу свои извинения, если я воспринимаю вас слишком буквально, а вы хотите что-то более общее, но это будет именно так, как вы просили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...