String 替换未知子字符串?
我想要一个最终输出字符串“颜色是绿色、红色和紫色。我更喜欢黑色。”您可以不使用String 替换未知子字符串?,string,String,我想要一个最终输出字符串“颜色是绿色、红色和紫色。我更喜欢黑色。”您可以不使用replace进行操作。只需迭代输入字符串,并将原始字符串的部分(不包含在括号中)和替换词(而不是包含在括号中的部分)添加到StringBuilder public static String updatedStr(){ String [] ar= {"green","red","purple","black"}; String str="The colors are (blue), (blue), and
replace
进行操作。只需迭代输入字符串
,并将原始字符串
的部分(不包含在括号中)和替换词(而不是包含在括号中的部分)添加到StringBuilder
public static String updatedStr(){
String [] ar= {"green","red","purple","black"};
String str="The colors are (blue), (blue), and (yellow). I prefer (orange)";
此方法返回:
public static String updatedStr()
{
String [] ar= {"green","red","purple","black"};
String str="The colors are (blue), (blue), and (yellow). I prefer (orange)";
StringBuilder out = new StringBuilder ();
int x = 0;
int pos = 0;
for(int i = str.indexOf('(', 0); i != -1; i = str.indexOf('(', i + 1)) {
out.append (str.substring(pos,i)); // add the part between the last ) and the next (
out.append (ar[x++]); // add replacement word
pos = str.indexOf(')', i) + 1;
}
out.append (str.substring(pos)); // add the part after the final )
return out.toString ();
}
这段代码做了一些简化的假设。例如,replacements数组中的元素数应至少与要替换的字数相同。更完整的实现应该包含额外的检查。您可以通过计算要替换的位置并将其保存在数组中来完成此操作,如下所示:
The colors are green, red, and purple. I prefer black
公共静态字符串updatedStr(){
字符串[]ar={“绿色”、“红色”、“紫色”、“黑色”};
String str=“颜色是(蓝色)、(蓝色)和(黄色)。我更喜欢(橙色)”;
ArrayList arr=新的ArrayList();
int pos[]=new int[ar.length];//在此处保存位置
对于(int i=str.indexOf('(',0);i!=-1;i=str.indexOf('(',i+1)){
arr.add(str.substring(i+1,str.indexOf('),i));
pos[arr.size()-1]=i;//保存它!
}
//从右到左更换
对于(int j=pos.length-1;j>=0;j--){
字符串newStr=str.substring(0,pos[j]+1)+ar[j]+str.substring(str.indexOf('),pos[j]+1),str.length());
str=newStr;
}
返回str;
}
这里的诀窍是,我从右到左进行替换,以便在替换时需要替换的位置不会移动。这听起来不容易。您必须构建一个“参数”列表:查找每个参数的开始和结束,例如(蓝色)。and store(argPos、fromPos、toPos):在步骤2中,一步一步地构建整个字符串,并用替换项替换参数是否将括号保留在最终字符串中?不,我不希望在最终字符串中使用括号谢谢!我试图在一个实例中实现这一点,其中ar={“green”,“red”}。在这种情况下,从右到左替换会得到不正确的输出。我希望输出为“颜色为绿色、红色和(黄色)。我更喜欢(橙色)”,以便为适当的位置提供替换,而字符串的其余部分不变。你有什么方法可以做到这一点吗?我不知道你的意思,你的例子在括号的使用上是不一致的。您有比ar中的值更多的插槽要替换吗?非常感谢!我目前正试图得到“颜色是绿色,红色和(黄色)。我更喜欢(橙色)”当ar={“绿色”,“红色”}。任何提示都会有帮助。
public static String updatedStr(){
String [] ar= {"green","red","purple","black"};
String str="The colors are (blue), (blue), and (yellow). I prefer (orange)";
ArrayList<String> arr = new ArrayList<String>();
int pos [] = new int[ar.length]; // save locations here
for(int i = str.indexOf('(', 0); i != -1; i = str.indexOf('(', i + 1)) {
arr.add(str.substring(i + 1, str.indexOf(')', i)));
pos[arr.size()-1] = i; // save it!
}
// replace from right to left
for (int j=pos.length-1;j>=0;j--){
String newStr = str.substring(0, pos[j]+1) + ar[j] + str.substring(str.indexOf(')',pos[j]+1), str.length());
str = newStr;
}
return str;
}