Java ha un metodo integrato per determinare se un identificatore è legale

3

Assegnare un nome a una variabile oa una classe, ad esempio, deve rispettare alcune regole (ad esempio non consentire parole chiave o parole riservate come identificatori)

Davvero non voglio codificare il mio metodo per fare una cosa del genere. Java ha già qualcosa di già costruito?

Il mio obiettivo è che sto costruendo un generatore di espressioni / generatore di codice. Riconoscerà le variabili specificate dall'utente e queste devono rispettare le regole di identificazione di java o viene presentato un avviso all'utente per rinominare la sua variabile.

    
posta Constantin 07.09.2013 - 22:48
fonte

4 risposte

3

Dovrai dare un'occhiata a JavaUtils.isJavaKeyword ... anche se non fa parte dell'API Java, fa parte dell'Apache Apache:
link

    
risposta data 07.09.2013 - 23:00
fonte
6

Per controllare singoli caratteri / punti codice:

Per verificare gli identificatori completi:

Quando lavori con i file sorgente, tieni presente che parti di un identificatore possono essere unicode sfuggito . I metodi sopra menzionati non lo considerano.

Esempio:

Main.java

class Main {
    // Field 'foo'
    private String \u0066oo;
}
    
risposta data 16.10.2018 - 19:28
fonte
3

Suppongo che prenderò a prestito dal codice JavaUtils quindi:)

static final Collator englishCollator = Collator.getInstance(Locale.ENGLISH);
static final String keywords[] = {
                 "abstract",  "assert",       "boolean",    "break",      "byte",      "case",
                 "catch",     "char",         "class",      "const",     "continue",
                 "default",   "do",           "double",     "else",      "extends",
                 "false",     "final",        "finally",    "float",     "for",
                 "goto",      "if",           "implements", "import",    "instanceof",
                 "int",       "interface",    "long",       "native",    "new",
                 "null",      "package",      "private",    "protected", "public",
                 "return",    "short",        "static",     "strictfp",  "super",
                 "switch",    "synchronized", "this",       "throw",     "throws",
                 "transient", "true",         "try",        "void",      "volatile",
                 "while"
             };


     public static boolean isJavaKeyword(String keyword) {
                return (Arrays.binarySearch(keywords, keyword, englishCollator) >= 0);
     } 
    
risposta data 07.09.2013 - 23:18
fonte
2

JJavaName in Sun's JCodeModel ha il seguente metodo:

/**
 * Checks if a given string is usable as a Java identifier.
 */
public static boolean isJavaIdentifier(String s) {
    if(s.length()==0)   return false;
    if( reservedKeywords.contains(s) )  return false;

    if(!Character.isJavaIdentifierStart(s.charAt(0)))   return false;

    for (int i = 1; i < s.length(); i++)
        if (!Character.isJavaIdentifierPart(s.charAt(i)))
            return false;

    return true;
}

Sfortunatamente, il campo reservedKeywords è privato e non esiste il metodo isReservedWord , ma se l'obiettivo è convalidare una stringa come identificativo, questo è l'ideale.

    
risposta data 09.03.2018 - 15:10
fonte

Leggi altre domande sui tag