2015-11-03 67 views
-2

我想使用來自字符串數組的迭代值替換字符串中的所有特定字符。使用字符串數組中的迭代值替換字符串中的一個字符

String Sample = " Select * from table A where Id = ? or Id = ?"; 

    String [] args = new String[]{"12","14"} 

我想替換'?'來自具有args值的樣本字符串。 新的字符串應該像

Sample = " Select * from table A where Id = 12 or Id = 14"; 

任何一個可以幫助我做一些最好的字符串替換Java中

+2

它看起來像你想構造一個SQL查詢。這不是如何做到這一點,查詢SQL注入(你試圖做的事情會容易受到它)。然後查看準備好的語句,以瞭解如何正確執行此操作。 – tnw

+0

看看'String.replaceFirst' http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceFirst(java.lang.String,%20java.lang.String) –

+0

您可以首先生成語句,如下所示:「從表A中選擇*,其中Id =」+ args [0] +「或Id =」+ args [1]; – MiKE

回答

3

方法看來你有一個誤導的做法。您有一個字符串,看起來像是爲預先準備的語句設計的,而數組是該準備語句的參數列表。像這樣使用它。不要手動替換這些值。

使用預準備語句也是推薦的方式,而不是使用參數格式化字符串。 您可以從SQL注入,類型驗證和性能等方面獲得巨大的好處。

搜索使用預準備語句。您可能需要使用正確的值類型將參數數組更改爲Object[],而不是像現在那樣使用字符串。

+0

但是,如果您真的需要生成一個自定義語句來根據id提取一些信息呢?爲了安全起見,你可以嘗試解析int。 – MiKE

+0

@janos你是對的,但我在特定的情況下這樣做。 –

+0

如果你必須這樣做,那麼非常小心。 – Thevenin

0
String Sample = " Select * from table A where Id = ? or Id = ?"; 
    String[] sampleSplitted = Sample.split(""); 
    String [] args = new String[]{"12","14"}; 
    String result = ""; 

    int found = 0; 
    for(int i=0; i < sampleSplitted.length; i++){ 
     String currentPart = sampleSplitted[i]; 

     if(currentPart.equals("?")){ 
      currentPart = args[found]; 
      found++; 
     } 
     result = result + currentPart; 
    } 

結果:

" Select * from table A where Id = 12 or Id = 14" 
+1

這很容易被SQL注入。 – tnw

+0

你是對的SQL注入。我只是以一種迭代的方式回答 – rguerra