如何替换数组中字符串的一部分?

时间:2013-12-08 23:05:30

标签: java arrays string

我在尝试替换数组中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来满足我的需求接近的方法。关于如何解决这个问题的任何建议?

2 个答案:

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