Java 命令行中的元字符
守则:Java 命令行中的元字符,java,regex,string,command-line-arguments,Java,Regex,String,Command Line Arguments,守则: String s=“\d” 引发编译器错误,转义字符非法。好的,明白了 但守则: class Test { public static void main(String[] args) { String s = args[0]; System.out.println(s); } } 使用命令java-Test\d或java-Test“\d”调用时不执行。为什么 实际上,它甚至打印:\d,而不使用双反斜杠(\\d) 通过命令行提供的参数不只是字符串吗 我知道它不能引发编译器错误,因为命令
String s=“\d”代码>
引发编译器错误,转义字符非法。好的,明白了
但守则:
class Test
{
public static void main(String[] args)
{
String s = args[0];
System.out.println(s);
}
}
使用命令java-Test\d
或java-Test“\d”
调用时不执行。为什么
实际上,它甚至打印:\d
,而不使用双反斜杠(\\d)
通过命令行提供的参数不只是字符串吗
我知道它不能引发编译器错误,因为命令行中提供的参数是在编译阶段之后,但它不应该引发运行时异常或其他什么吗
或者,一旦我们通过了编译阶段,字符串包含的内容就无关紧要了(因为代码被转换成字节码,整个代码结构都被改变了)?如果是,请有人详细说明
提前通知 双退格只是语法问题。在Java代码中,要在引号中表示单个反斜杠,必须键入两次。然而,您真正代表的是一个反斜杠
当您通过命令行传递它时,您不需要转义,因为它不是Java代码。双退格只是语法问题。在Java代码中,要在引号中表示单个反斜杠,必须键入两次。然而,您真正代表的是一个反斜杠
当您通过命令行传递它时,不需要转义,因为它不是Java代码
通过命令行提供的参数不只是字符串吗
是的,它们是弦。字符串对象。那很好
然而,在代码中,您有字符串文本。Java编译器会对这些对象进行解析,以便在执行时生成字符串对象。转义是Java语言的一部分,而不是字符串对象的一部分
(请注意,其他一些库(特别是正则表达式)也可能有自己的转义机制,但基本上如果您运行
java Foo \d
然后假设您的shell没有做任何有趣的事情(这取决于该shell!),那么您将得到一个两个字符的字符串:一个反斜杠后跟一个d
通过命令行提供的参数不只是字符串吗
是的,它们是字符串。字符串对象。很好
但是,在代码中,您有字符串文本。这些文本在执行时由Java编译器解析以生成字符串对象。转义是Java语言的一部分,而不是字符串对象的一部分
(请注意,其他一些库(特别是正则表达式)也可能有自己的转义机制,但基本上如果您运行
java Foo \d
然后假设您的shell没有做任何有趣的事情(这将取决于该shell!)然后你会得到一个两个字符的字符串:一个反斜杠后跟一个d
你没有意识到shell命令行和Java是两种不同的语言。给shell的命令行被解析为shell命令。给Java
的Java程序被解析为Java
您可能还混淆了字符串文字(生成字符串的代码片段)和字符串(由一系列字符组成的值)
您希望将两个字符的字符串\d
存储在变量s
中。为此,需要构造一个适当的字符串文本
- 要生成两个字符串
\d
,可以使用cmd(Windows shell)字符串literal\d
- 要生成两个字符串
\d
,可以使用Java字符串文本“\\d”
您没有意识到shell命令行和Java是两种不同的语言。给定给shell的命令行被解析为shell命令。给定给
Java
的Java程序被解析为Java
您可能还混淆了字符串文字(生成字符串的代码片段)和字符串(由一系列字符组成的值)
您希望将两个字符的字符串\d
存储在变量s
中。为此,需要构造一个适当的字符串文本
- 要生成两个字符串
\d
,可以使用cmd(Windows shell)字符串literal\d
- 要生成两个字符串
\d
,可以使用Java字符串文本“\\d”
我相信字符串中的非法转义字符只是一个编译器错误,不是吗?那么Java是否应该继续,确保它本身在运行时没有非法转义?它保护的是作为程序员的您,而不是作为用户的您。我相信字符串中的非法转义字符只是一个编译器错误,不是吗?所以不会va继续,确保它自己在运行时没有非法逃逸?它保护的是作为程序员的您,而不是作为用户的您。@polet:所以基本上可以归结为:“一旦我们通过了编译阶段,字符串包含的内容就无关紧要了”.right???@WickeD不是真的。你一直在操纵值“\d”。问题是,在Jav代码中,为了表示该值,语法需要转义,因此你必须写“\\d”。就字符串值而言,绝对没有区别!@polet:所以基本上可以归结为:“一旦我们通过了编译阶段,字符串包含的内容就无关紧要了”。对吗???@WickeD不是真的。您一直在操作值'\d'。问题是在Jav代码中,为了表示该值,语法需要转义,因此您必须编写“\\d”“.就字符串值而言,绝对没有区别!”转义是Java语言的一部分,而不是字符串对象的一部分。“请详细说明..什么是指成为字符串对象的一部分。@邪恶:我的意思是字符串只是一个字符序列。它没有转义序列的概念。转义是o部分