带双引号和变量的字符串

时间:2014-01-29 21:22:10

标签: java string escaping

我正在尝试在Win7机器上使用sendEmail发送电子邮件。它工作正常,但我决定将主题和消息作为参数发送到sendEmail方法。

因为主题和正文包含短划线字符,所以sendEmail没有正确反应,因为它也使用了短划线字符。我需要做的是在subjectText变量和messageText变量周围添加双引号。

    stdin.println("sendemail -t " + emailAddresses + " -f admin@xyz.com -u " +
        subjectText + " -m " + messageText + " -s smtp.gmail.com:25");

我试过了:

stdin.println("sendemail -t " + emailAddresses + " -f admin@xyz.com -u " + \" +
       subjectText + "\"+ -m "\"+ messageText + "\" -s smtp.gmail.com:25");

但它不起作用。

输出需要看起来像这样:

"sendemail -t tome@isp.com -f admin@xyz.com -u "Subject with a - char" -m "message body with a - char" -s smtp.gmail.com:25"

cmd将在我的Eclipse控制台中显示。

感谢您的帮助......

2 个答案:

答案 0 :(得分:4)

正如其他人所说,转义的引号需要在文字内。

作为一些额外的思考食物;使用String.format()或使用StringBuilder创建包含变量的字符串时,有时可能更整洁或更简单。

使用String.format

作为示例
String str = String.format(
    "sendemail -t %s -f admin@xyz.com -u \"%s\" -m \"%s\" -s smtp.gmail.com:25",    
     emailAddress, subjectText, messageText);

答案 1 :(得分:1)

您的转义双引号本身必须位于字符串文字内。尝试

stdin.println("sendemail -t " + emailAddresses + " -f admin@xyz.com -u \"" +
   subjectText + "\" -m \"" + messageText + "\" -s smtp.gmail.com:25");