用字符串替换一组符号的更好方法

时间:2017-03-14 19:11:06

标签: java

我需要创建一个简单的代码,其中包含stringarray of String,并将?符号替换为数组的每个元素。

以下是junit中的测试用例:

@Test
    public void QueryFitterTest() {

        ArrayList<String> args=new ArrayList<String>(); 

        args.add("Bad code");
        args.add("The code is buggy");

        String res = QueryMaker.queryFitter("insert into  vulnerability (name,descirption) values(?,?)",args);
        String correctQuery="insert into  vulnerability (name,descirption) values(Bad code,The code is buggy)";
        assertEquals(correctQuery, res);

    }

这是代码:

public static String queryFitter(String query, ArrayList<String> args){

    String[] colapsedQuery = query.split("");
    int parmNum=0;
    for(int i=0;i<colapsedQuery.length;i++){
        if(colapsedQuery[i]=="?"){
            colapsedQuery[i]=args.get(parmNum);
            parmNum++;
        }

    }

    query=concatenator(colapsedQuery);
    return query;

}
public static String concatenator(String[] colapsedQuery){
    String delimiter = "";
    String result = String.join(delimiter, colapsedQuery);
    System.out.println("query is: "+result);
    return result;
}

代码工作正常,但

我不喜欢我的方法,有更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

  

有两个问题:

     

1-我的代码无法通过测试,它返回的查询没有任何   变化

     

查询是:插入漏洞(name,descirption)值(?,?)

     

2-   我不喜欢我的方法,有更简单的方法吗?

好消息是,您的JUnit测试发现程序中存在错误。另一个好消息是,你的两个问题的答案都是一样的。只需在方法queryFitter中修复您的代码。

请尝试以下代码:

public static String queryFitter(String query, ArrayList<String> args){

   for(int i=0;i<args.size();i++){
      query = query.replaceFirst("\\?",args.get(i));
   } 

   return query;
}

几乎忘了告诉你。您也不需要concatenator方法。