我需要创建一个简单的代码,其中包含string
和array 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;
}
代码工作正常,但
我不喜欢我的方法,有更简单的方法吗?
答案 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
方法。