我得到一个字符串,例如:“用户<<< 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个变量)。
答案 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.