Может ли кто-нибудь объяснить мне, как именно JVM анализирует строку / аргументы из командной строки и создает из нее массив String (String [] args)?Если возможно, я бы хотел увидеть код.
Допустим, у меня есть скомпилированная Java-программа, которая принимает данные из командной строки:
$ java Test Hi, now you "parse me" ""plea"se
Она создаетмассив с такими значениями:
args[0] = Hi,
args[1] = now
args[2] = you
args[3] = parse me
args[4] = please
Я предполагаю, что текст из командной строки передается в виде String в JVM, затем JVM разбивает строку в соответствии с некоторыми правилами и создает из нее массив String [].
По наблюдениям, я вижу это так:
Он разделяет всю входную строку из командной строки разделителем пробела, если пробел не находится между парой двойных кавычек "
.Двойные кавычки "
и \
рассматриваются как специальные символы так же, как bash, и делают с ними точно так же, как и bash.Таким образом, всякий раз, когда он находит "
, он пытается сопоставить его с другим "
, и все, что находится между парой двойных кавычек, считается одной строкой, если оно не экранировано \
.