簡體   English   中英

如何在 CLI 輸入和 main(args:Array[String]) 之間復制標記化

[英]How to replicate the tokenization betweeen CLI input and main(args:Array[String])

我從配置文件中接收我的 CLI 參數作為單個字符串,它們沒有進入

def main(args: Array[String])

然后我使用 Picocli 來解析 args,但我需要先將字符串標記為一個數組,並且我不想僅為標記化函數添加完整的額外 lib picocli-shell-jline3 Java 標准庫中是否有一些標記器,我可以使用它來 100% 模仿通過 CLI 將 args 傳遞到main中得到的標記化?

java命令如何將 CLI args 標記為數組(並刪除多余的空格、尊重引號、空格等)? 還是實際上是操作系統層在做這件事並將每個令牌傳遞給 java 程序?

我沒有運氣谷歌搜索 - 繼續尋找關於如何 CLI args 的解釋,而不是在 CLI 和 JVM main(args:Array[String])方法之間如何標記它們。

picocli 在內部使用來解析@-files的邏輯(一個相對相似的場景)如下所示。 它並不完美,但希望足以滿足您的要求:

String line = // get single String with options and parameters (and maybe subcommands)

StreamTokenizer tok = new StreamTokenizer(new StringReader(line));
tok.resetSyntax();
tok.wordChars(' ', 255);
tok.whitespaceChars(0, ' ');
tok.quoteChar('"');
tok.quoteChar('\'');
tok.commentChar('#');

List<String> arguments = new ArrayList<>();
while (tok.nextToken() != StreamTokenizer.TT_EOF) {
    arguments.add(tok.sval);
}

// now do something with the arguments list...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM