Java字符串与命令行参数

时间:2011-07-22 19:11:32

标签: java string command-line-arguments backslash

为什么传递给Java类的命令行参数似乎是自动转义的,而在实例化的String对象中,转义符()似乎被忽略了。

例如,如果以这样的字符串开头:

SELECT * FROM my_table WHERE my_col like 'ABC_\' ESCAPE '\'

我尝试通过这样一个简单的类来运行它:

public class EscapeTest {
    public static void main (String[] args) {
        String str = "SELECT * FROM my_table WHERE " 
                     + "my_col like 'ABC_\' ESCAPE '\'";
        System.out.println("ARGS[0]: "+args[0]);
        System.out.println("STR: "+str);
}
}

我将上面的“SELECT”语句作为命令行arg传递给我,输出看起来像这样:

ARGS[0]: SELECT * FROM my_table WHERE my_col like 'ABC_\' ESCAPE '\'

STR: SELECT * FROM my_table WHERE my_col like 'ABC_' ESCAPE ''

如果我在Eclipse调试器中查看ARGS [0]的值,我会看到斜杠被转义。为什么会这样?我认为这很难预测。

1 个答案:

答案 0 :(得分:2)

字符串str的内容不包含任何反斜杠。这些由Java编译器处理Java字符串文字的转义序列。

命令行处理器大概这样做 - 它没有特别以任何方式处理反斜杠,虽然这将取决于你的shell。 (在大多数Unix shell中,以不同方式处理反斜杠。我的猜测是你在Windows上。)

因此,你的命令行参数确实有反斜杠。它们没有被正在执行的Java进程转义 - 它们只是字符串中的“那里”。

现在听起来调试器正在向您显示字符串时转义字符串,以便您可以看到标签和换行符等内容。重要的是要理解这是只是调试器显示字符串的方式 - 在Java字符串本身中没有“转义”这样的东西。

编辑:根据评论:

要在Java源代码中表达此字符串,您必须转义反斜杠:

String str = "SELECT * FROM my_table WHERE my_col like 'ABC_\\' ESCAPE '\\'"; 

反斜杠必须进行转义,因为反斜杠是Java字符串文字中的转义字符。