2015-11-03 65 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