2013-03-15 19 views
11

Jak najlepiej sprawdzić, czy dane wejściowe łańcucha byłyby poprawną zmienną języka Java dla kodowania? Jestem pewien, że nie jestem pierwszym, który chce to zrobić. Ale może brakuje mi właściwego słowa kluczowego, aby znaleźć coś przydatnego.Jak sprawdzić, czy ciąg znaków jest prawidłową zmienną języka Java?

Najlepiej byłoby prawdopodobnie regex, który sprawdza, czy:

  • rozpoczyna się literą

  • może następnie zawierać cyfry, litery

  • może zawierać pewne znaki specjalne, takie jak " _ '(który?)

  • nie może zawierać separatora białych znaków
+1

Zastanawiam się, dlaczego potrzebujesz tego ... –

+3

@ JanDvorak: Automatyczne generowanie kodu (lub sprawdzanie poprawności)? – NPE

+0

http://stackoverflow.com/questions/11774099/legal-identifiers-in-java –

Odpowiedz

18
public static boolean isValidJavaIdentifier(String s) { 
    if (s.isEmpty()) { 
     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; 
} 

EDYCJA: i, jak wskazuje @ Joey, należy również odfiltrować słowa kluczowe i słowa zastrzeżone.

+6

Brakuje ci słów kluczowych, "true", "false" i "null". Muszą być odrzuceni. Ale tak, w przeciwnym razie jest to dokładnie to, co sugeruje spec ;-) – Joey

+0

O tak, to prawda. Istnieje również wiele innych słów kluczowych. –

+1

Nie tak wiele: http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.9 – assylias

6

Wystarczy użyć wbudowanego isName metody:

public static boolean isName(CharSequence name) 

ta zwraca czy dana nazwa jest składniowo poprawny nazwa kwalifikowana w najnowszej wersji źródłowej.

Zobacz dokumentację isName().

Powiązane problemy