gpt4 book ai didi

Java 字符串与命令行参数

转载 作者:行者123 更新时间:2023-12-02 08:13:58 25 4
gpt4 key购买 nike

为什么传递给 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”语句作为命令行参数传递,我得到的输出如下所示:

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] 的值,我会发现斜杠被转义了。为什么会出现这种情况?我认为这有点难以预测。

最佳答案

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

命令行处理器可能没有这样做 - 它不会以任何方式特殊处理反斜杠,尽管这取决于您的 shell。 (在大多数 Unix shell 中,它会以不同的方式处理反斜杠。我的猜测是您使用的是 Windows。)

所以,你的命令行参数确实有反斜杠。它们没有被执行的Java进程转义——它们只是出现在字符串中。

现在听起来调试器在向您显示字符串时正在转义该字符串,以便您可以看到制表符和换行符等内容。重要的是要理解,这只是调试器显示字符串的方式 - Java 字符串本身不存在“转义”之类的东西。

编辑:根据评论:

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

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

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

关于Java 字符串与命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6794908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com