2017-03-14 6 views
0

Ich muss einen einfachen Code, der eine string erhalten, und eine array of String, und ersetzen Sie die ? Zeichen mit jedem Element des Arrays.Bessere Möglichkeit, eine Reihe von Zeichen durch Zeichenfolgen zu ersetzen

Hier ist der Testfall in junit ist:

@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); 

    } 

und hier ist der Code:

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; 
} 

Der Code funktioniert gut, aber

ich nicht mein Ansatz mag Gibt es einen einfacheren Weg?

+2

tl; dr auf dem dup: 'colapsedQuery [i] =="? "' Wird * niemals * wahr sein. – azurefrog

+1

'colapsedQuery [i] =="? "'. Verwenden Sie ein Zeichen ''? ''Und verwenden Sie einfach' String.charAt (n) ' –

+3

Wenn dies gegen SQL geht, wäre der" bessere "Weg, IMO, PreparedStatement zu verwenden. Was passiert, wenn in der Eingabe Sonderzeichen stehen? – KevinO

Antwort

0

Es gibt zwei Probleme:

1- Mein Code kann den Test nicht passieren, es gibt die Abfrage ohne ändern.

Abfrage: INSERT INTO Verwundbarkeit (Name, Descirption) Werte

2- ich nicht mein Ansatz mag, ist es ein einfacher Weg, es zu tun (?,?)?

Nun, die gute Nachricht ist, dass Ihr JUnit Test einen Fehler in Ihrem Programm entdeckt hat. Die andere gute Nachricht ist, dass die Antwort auf beide Fragen die gleiche ist. Fixieren Sie Ihren Code einfach in der Methode queryFitter.

Versuchen Sie, den folgenden Code:

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; 
} 

Fast vergessen, Ihnen zu sagen. Sie benötigen keine concatenator Methode entweder.

+0

Awsome, danke Mann – Salman

Verwandte Themen