public final void parse ( String [ ] argv , Locale locale ) throws IllegalOptionValueException , UnknownOptionException { // It would be best if this method only threw OptionException, but for // backwards compatibility with old user code we throw the two // exceptions above instead. Vector otherArgs = new Vector ( ) ; int position = 0 ; this . values = new Hashtable ( 10 ) ; while ( position < argv . length ) { String curArg = argv [ position ] ; if ( curArg . startsWith ( "-" ) ) { if ( curArg . equals ( "--" ) ) { // end of options position += 1 ; break ; } String valueArg = null ; if ( curArg . startsWith ( "--" ) ) { // handle --arg=value int equalsPos = curArg . indexOf ( "=" ) ; if ( equalsPos != - 1 ) { valueArg = curArg . substring ( equalsPos + 1 ) ; curArg = curArg . substring ( 0 , equalsPos ) ; } } else if ( curArg . length ( ) > 2 ) { // handle -abcd for ( int i = 1 ; i < curArg . length ( ) ; i ++ ) { Option opt = ( Option ) this . options . get ( "-" + curArg . charAt ( i ) ) ; if ( opt == null ) throw new UnknownSuboptionException ( curArg , curArg . charAt ( i ) ) ; if ( opt . wantsValue ( ) ) throw new NotFlagException ( curArg , curArg . charAt ( i ) ) ; addValue ( opt , opt . getValue ( null , locale ) ) ; } position ++ ; continue ; } Option opt = ( Option ) this . options . get ( curArg ) ; if ( opt == null ) { throw new UnknownOptionException ( curArg ) ; } Object value = null ; if ( opt . wantsValue ( ) ) { if ( valueArg == null ) { position += 1 ; if ( position < argv . length ) { valueArg = argv [ position ] ; } } value = opt . getValue ( valueArg , locale ) ; } else { value = opt . getValue ( null , locale ) ; } addValue ( opt , value ) ; position += 1 ; } else { otherArgs . addElement ( curArg ) ; position += 1 ; } } for ( ; position < argv . length ; ++ position ) { otherArgs . addElement ( argv [ position ] ) ; } this . remainingArgs = new String [ otherArgs . size ( ) ] ; otherArgs . copyInto ( remainingArgs ) ; }
Extract the options and non - option arguments from the given list of command - line arguments . The specified locale is used for parsing options whose values might be locale - specific .