我有一个字符串The quick * fox jumps * the * dog
,我有一个字符串数组String[] array = {"brown", "over", "lazy"}
。
将所有*
替换为数组中的字符串的最佳方法是什么?然后,第一个*
必须替换为array[0]
元素,第二个*
替换为array[1]
当然,解决方案必须允许N替换数组中的N个元素。
答案 0 :(得分:4)
String.format("The quick * fox jumps * the * dog".replace("*", "%s"), array);
> The quick brown fox jumps over the lazy dog
replace
*
至%s
并String.format
使用parameters
,这种方式有效。
答案 1 :(得分:3)
for (String x : array) {
yourString = yourString.replaceFirst("\\*", x);
}
答案 2 :(得分:3)
使用Java regex库的appendReplacement
功能:
StringBuffer res = new StringBuffer();
Pattern regex = Pattern.compile("[*]");
Matcher matcher = regex.matcher("Quick * fox jumps * the * dog");
int pos = 0;
String[] array = {"brown", "over", "lazy"};
while (matcher.find()) {
String replacement = pos != array.length ? array[pos++] : "*";
matcher.appendReplacement(res, replacement);
}
matcher.appendTail(res);
答案 3 :(得分:1)
在字符串The quick * fox jumps * the * dog
中的每个字符上写一个for循环迭代,每次遇到*
时,在保持当前索引的同时选择数组的下一个元素。
String text = "The quick * fox jumps * the * dog";
String[] elements = {"brown", "over", "lazy"};
int idx = 0;
StringBuilder result = new StringBuilder();
for (char c : text.toCharArray()) {
if (c == '*')
result.append(elements[idx++]);
else
result.append(String.valueOf(c));
}
答案 4 :(得分:1)
如果通过"最佳方式"你的意思是性能,然后使用indexOf()
的循环,并使用StringBuilder
构建结果。
其他答案已经涵盖了"简单" (即更少的代码),如果那是你的意思"最佳方式"。
String input = "The quick * fox jumps * the * dog";
String[] array = {"brown", "over", "lazy"};
StringBuilder buf = new StringBuilder();
int start = 0;
for (int i = 0, idx; i < array.length; i++, start = idx + 1) {
if ((idx = input.indexOf('*', start)) < 0)
break;
buf.append(input.substring(start, idx)).append(array[i]);
}
String output = buf.append(input.substring(start)).toString();
System.out.println(output);
输出
The quick brown fox jumps over the lazy dog
此代码将默认接受数组中太多或太少的值。
答案 5 :(得分:0)
在所有情况下,您都需要重建String,最好的方法是使用StringBuilder
有两种方法:
<强>第一强>
*
*
,请在索引变量处添加字符串,该变量表示指向字符串数组的指针第二
*
,这将为您提供原始字符串的字符串数组,而不包含*