我在尝试替换数组中String的一部分时遇到问题。基本上,我有一个字符串,其中包含:
关系(ATT1,ATT2,ATT3)\ nRelation(ATT1,ATT2,ATT3)
我已根据“\ n”拆分字符串并存储到数组中: [关系(att1,att2,att3),关系(att1,att2,att3)]
我的问题是为数组中的每个元素替换字符串的这一部分:(att1,att2,att3)
到( )
。这是我的代码片段:
String txt = "Relation(att1,att2,att3)\nRelation(att1,att2,att3)";
StringBuilder sb = new StringBuilder();
sb.append(txt);
String[] myArray = sb.toString().split("\n");
int startIdx = sb.indexOf("(");
int endIdx = sb.indexOf(")");
int i;
for(i=0; i<myArray.length; i++){
myArray[i] = myArray[i].replace(startIdx,endIdx,"( )");
}
System.out.println("---- Single Array ------");
System.out.println(Arrays.toString(myArray));
问题是for循环中的行,它给出了错误陈述
“String中的替换(char,char)类型不适用于 arguments(int,int,String)“
我已经研究过其他方法,但是没有找到任何与使用StringBuilder和indexOf来满足我的需求接近的方法。关于如何解决这个问题的任何建议?
答案 0 :(得分:1)
没有方法可以像这样替换字符串的特定部分。您可以使用两个子字符串调用来分割开始和结束部分:
myArray[i] = myArray[i].substring(0, startIdx) +
"( )" + myArray[i].substring(endIdx + 1);
您可以使用正则表达式更简单地执行此操作:
String txt = "Relation(att1,att2,att3)\nRelation(att1,att2,att3)";
String[] myArray = txt.replaceAll("\\(.*?\\)", "( )").split("\n");
答案 1 :(得分:1)
String.replace函数有两个参数:replace(CharSequence target, CharSequence replacement)
和replace(replace(char oldChar, char newChar)
。但是你试图提供三个:replace(startIdx, endIdx, "( )")
。
首先使用replaceAll(regex, replacement)
函数将所有(X)
替换为( )
。
然后将字符串拆分为\n
String str = "Relation(att1,att2,att3)\nRelation(att1,att2,att3)".replaceAll("\\(.*\\)", "( )");
String splitStr[] = str.split("\n");