将字符串替换为数组中的值

时间:2017-06-10 13:14:05

标签: java arrays regex string

我有一个字符串The quick * fox jumps * the * dog,我有一个字符串数组String[] array = {"brown", "over", "lazy"}

将所有*替换为数组中的字符串的最佳方法是什么?然后,第一个*必须替换为array[0]元素,第二个*替换为array[1]当然,解决方案必须允许N替换数组中的N个元素。

6 个答案:

答案 0 :(得分:4)

String.format("The quick * fox jumps * the * dog".replace("*", "%s"), array);
> The quick brown fox jumps over the lazy dog

replace *%sString.format使用parameters,这种方式有效。

了解详情:How to format strings in Java

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

Demo.

答案 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

有两种方法:

<强>第一

  • 在字符串上按字符迭代,如果它不是*
  • ,则将其添加到StringBuilder中
  • 如果字符为*,请在索引变量处添加字符串,该变量表示指向字符串数组的指针
  • 将指数提高1。

第二

  • 使用split()方法将原始字符串拆分为*,这将为您提供原始字符串的字符串数组,而不包含*
  • 同时在两个数组上迭代一次,添加分割数组的项目,然后在第二个替换数组中添加相应的索引。