用Java替换数据中的变量

时间:2014-03-08 00:26:58

标签: java

我得到一个字符串,例如:“用户<<< a1>>是<< a2>> 50岁。”
而且我还有一个数组,其中包含需要进入字符串的数据!对于前者a [0] =“约翰”; a [1] =“30”
因此,对于此示例,我想将<< a1 >>替换为John,将<< a2 >>替换为30。

我唯一能找到的是以下问题:How to replace a set of tokens in a Java String?,但说实话,我什么都不懂,不确定这是不是我真正想要的。

那么,这真的是我需要使用的吗?如果是的话,我会去阅读一些教程 提前谢谢。

编辑:注意:我无法控制进入的字符串。所以这就是我打字的方式。所有变量都采用<< a0 >>形式,变量数量未知(甚至可能有10个变量)。

4 个答案:

答案 0 :(得分:4)

String.format("The user %s is %s 50 years old.", a[0],a[1]);

如果你必须使用<<a1>><<a2>>,那么就这样......

String s = "The user <<a1>> is <<a2>> years old.";
String output = s.replace("<<a1>>", a[0]).replace("<<a2>>", a[1]);

答案 1 :(得分:1)

如果您无法控制字符串,可以按如下方式替换<< a# >>的实例:

String yourString = "The user << a1 >> is << a2 >> years old.";
String transformedString = yourString.replaceAll("<< a\d >>", "%s");

这会将<< a# >>的任何实例替换为%s。这会将您的"The user << a1 >> is << a2 >> years old."字符串更改为"The user %s is %s years old",可以与字符串格式化程序一起使用。

然后使用字符串格式化程序,如下所示。

String finalString = String.format(transformedString, a);

答案 2 :(得分:1)

for(int i = 0; str.contains("<< a"+i+" >>"), i++) {
    str = str.replace("<< a"+i+" >>", a[i]);
}

答案 3 :(得分:1)

在进一步处理之前,没有什么可以阻止您更改输入字符串的格式。它会给你更多选择。

也就是说,这会使用“不情愿”的正则表达式来替换所有需要的“间隙”。它假定索引号前面只有一个字符,但索引可以是多个数字。

 import  java.util.regex.Pattern;
 import  java.util.regex.Matcher;
 /**
    <P>{@code java FillGaps}</P>
  **/
 public class FillGaps  {
    public static final void main(String[] ignored)  {

       String sRegex = "<< (.+?) >>";

       String sToSearch = "The user << a1 >> is << a2 >> years old.";
       String[] values = new String[] {"John", "30"};

       Matcher m = Pattern.compile(sRegex).matcher(sToSearch);
       StringBuffer sb = new StringBuffer();

       while(m.find())  {
          String gapName = m.group(1);
          String idxPlus1AsStr = gapName.substring(1, gapName.length());
          int arrayIdx = Integer.parseInt(idxPlus1AsStr) - 1;
          m.appendReplacement(sb, values[arrayIdx]);
       }
       m.appendTail(sb);

       System.out.println(sb);
    }
 }

输出:

[C:\java_code\]java FillGaps
The user John is 30 years old.