2012-05-01 5 views
11

Я хочу поместить специальные символы, круглые скобки ('(' и ')') и апостроф ('), в перечисление.Специальные символы в перечислении

Я это:

private enum specialChars{ 
    "(", ")", "'" 
} 

, но он не работает. Java говорит что-то о недопустимых токенах. Как я могу это решить?

Grtz me.eatCookie();

+0

Вы видели это: http://stackoverflow.com/questions/3978654/java-string-enum? – MilkyWayJoe

ответ

17

Вы могли бы сделать что-то вроде этого:

private enum SpecialChars{ 
    COMMA(","), 
    APOSTROPHE("'"), 
    OPEN_PAREN("("), 
    CLOSE_PAREN(")"); 

    private String value; 
    private SpecialChars(String value) 
    { 
     this.value = value; 
    } 

    public String toString() 
    { 
     return this.value; //will return , or ' instead of COMMA or APOSTROPHE 
    } 
} 

Пример использования:

public static void main(String[] args) 
{ 
    String line = //..read a line from STDIN 

    //check for special characters 
    if(line.equals(SpecialChars.COMMA)  
     || line.equals(SpecialChars.APOSTROPHE) 
     || line.equals(SpecialChars.OPEN_PAREN) 
     || line.equals(SpecialChars.CLOSE_PAREN) 
    ) { 
     //do something for the special chars 
    } 
} 
+0

Down голосование за переопределение toString() и использование String для представления одного символа. –

+0

Nice, downvotes для несогласных с вами. Настоящий зрелый. –

+0

Голос основан на моих убеждениях и опыте. Даже не смотрел ваше имя перед вашим комментарием. Береги себя. –

4

Константы перечисления должны быть действительными идентификаторами Java. Вы можете переопределить toString, если хотите, по-разному.

public enum SpecialChars { 

    OPEN_PAREN { 
     public String toString() { 
      return "("; 
     } 
    }, 

    CLOSE_PAREN { 
     public String toString() { 
      return ")"; 
     } 
    }, 

    QUOTE { 
     public String toString() { 
      return "'"; 
     } 
    } 

} 
+0

Не стоит переписывать метод toString(). –

+4

@EugeneKuleshov Вы _supposed_ для переопределения toString() для каждого создаваемого вами класса. –

+0

@EugeneKuleshov Oracle думает иначе: [«Тип перечисления должен переопределить этот метод, когда существует более строковая форма, удобная для программистов».] (Http://docs.oracle.com/javase/1.5.0/docs/api /java/lang/Enum.html#toString%28%29) – dasblinkenlight

3

Вы должны использовать что-то вроде этого, вместо:

private enum SpecialChars { 
    LEFT_BRACKET('('), 
    RIGHT_BRACKET(')'), 
    QUOTE('\''); 

    char c; 

    SpecialChars(char c) { 
    this.c = c; 
    } 

    public char getChar() { 
    return c; 
    } 
} 
Смежные вопросы