【发布时间】:2013-12-06 02:16:03
【问题描述】:
我有一个像这样的字符串 "Marko's place" "boulevard "Arequipa"" 包含单引号或双引号的字符串,在 Java 中使用正则表达式如何让前面的字符串变得像这样 "Marko\s place" "boulevard \ "Arequipa\"" 我对正则表达式没有经验,谢谢您的回答
好的,我正在从 mysql 表中读取记录并构造插入 sql 以将此信息传递给 sqlite 表
Statement qryMySQL= cnMySql.createStatement();
ResultSet rs = qryMySQL.executeQuery("select * from tblclientes ");
Statement qrySQLite = cnSqLite.createStatement();
qrySQLite.addBatch("begin transaction");
qrySQLite.addBatch("CREATE TABLE 'tblclientes' ('_id' INTEGER,'Nombres' varchar(25) DEFAULT NULL,'Apellidos' varchar(25) DEFAULT NULL,'RazSocial' varchar(20) DEFAULT NULL,'Direccion' varchar(50) DEFAULT NULL,'Ciudad' varchar(15) DEFAULT 'Arequipa','Fono' varchar(12) DEFAULT NULL,'Fax' varchar(12) DEFAULT NULL,'Email' varchar(35) DEFAULT NULL,'Ruc' varchar(12) DEFAULT NULL,'latitud' decimal(20,14) DEFAULT NULL,'longitud' decimal(20,14) DEFAULT NULL,'ruta' varchar(10) DEFAULT NULL,'sincro' CHAR(10),'copiar' BOOL DEFAULT 1)");
while (rs.next())
{
//System.out.println (rs.getInt(1) + " " + rs.getString (2) );
sql = "INSERT INTO tblclientes(_id,nombres,apellidos) " +
"VALUES("+rs.getInt("id")+", \""+rs.getString("nombres")+"\",\""+rs.getString("apellidos")+"\")";
qrySQLite.addBatch(sql);
// System.out.println (sql);
}
qrySQLite.addBatch("end transaction");
qrySQLite.executeBatch();
但是 mysql 表中的某些字段有字符 " 和 ' 导致 sql 插入语句中的错误然后我需要这个
<Marko's place> ===> <Marko\'s place>
<boulevard "Arequipa"> ====> <boulevard \"Arequipa">
所以结果必须在 " 或 ' 之前添加 \
【问题讨论】:
-
请准确描述您的需求(举几个例子)。您提供的示例并未明确定义您要查找的内容。您是一次处理一个字符串还是多个字符串?看起来您想保留打开和关闭双引号,但不清楚应该如何定义它们。您的输入是 single 字符串还是多个字符串?它们是否由换行符分隔?
-
Apache 的 StringEscapeUtils 中的 escapeSql() 和/或 escapeJava() 方法看起来完全符合您的需求。
-
请注意,SQL 字符串中的引号通常被另一个引号字符(不是反斜杠)转义。例如,您通常会使用以下命令来逃避 Joe's Diner:
Joe''s Diner -
escapeSql() 方法正是我需要的,谢谢