Единственный раз, когда я бы сказал, что прямое манипулирование argv - это плохая идея, это когда приложение меняет свое поведение в зависимости от содержимого argv [0].
Однако, изменение поведения программы в зависимости от argv [0] само по себе является очень плохой идеей , где переносимость является проблемой.
Кроме этого, вы можете обращаться с ним так же, как с любым другим массивом. Как сказал Джонатан, GNU getopt () неразрушающе переставляет список аргументов, я видел другие реализации getopt (), которые вплоть до сериализации и даже хэширования аргументов (полезны, когда программа приближается к ARG_MAX).
Просто будьте осторожны с арифметикой указателя.
Простое scala/java предложение, которое не разделяет во всех прописных строках как Нью-Йорк Сити :
def splitAtMiddleUppercase(token: String): Iterator[String] = {
val regex = """[\p{Lu}]*[^\p{Lu}]*""".r
regex.findAllIn(token).filter(_ != "") // did not find a way not to produce empty strings in the regex. Open to suggestions.
}
тест с:
val examples = List("catch22", "iPhone", "eReplacement", "TotalRecall", "NYC", "JGHSD87", "interÜber")
for( example <- examples) {
println(example + " -> " + splitAtMiddleUppercase(example).mkString("[", ", ", "]"))
}
это производит:
catch22 -> [catch22]
iPhone -> [i, Phone]
eReplacement -> [e, Replacement]
TotalRecall -> [Total, Recall]
NYC -> [NYC]
JGHSD87 -> [JGHSD87]
interÜber -> [inter, Über]
Изменяют regex для вырезания в цифрах также.