2015-10-17 14 views
5

Java include costanti per singoli caratteri come SPACE?Java definisce costanti per qualsiasi carattere come SPACE?

Avere nomi presi da Unicode sarebbe utile quando si eseguono manipolazioni di stringhe.

voglio che questo:

String musician = "Lisa" + Character.SPACE + "Coleman" ; 

... invece di questo:

String musician = "Lisa" + " " + "Coleman" ; 

(da non confondere con la classe java.lang.Character)

Se non in bundle con Java, le alternative?

+0

Penso che questa sarà exaplain: http://stackoverflow.com/a/21437830/460557 –

+0

Qualcuno ha fatto questo: http://blog.code-cop.org/2007/08/java-unicode-constants.html Non sei sicuro di quanto sia utile avere ** ogni ** carattere Unicode chiamato così. Ti suggerisco di nominare solo alcuni * speciali * di cui hai bisogno (e no, lo spazio non è speciale). – Andreas

risposta

7

Non esiste una tale costante, e per buoni motivi, IMO.

Perché utilizzare una costante al primo posto nell'esempio?

String musician = "Lisa" + Character.SPACE + "Coleman" ; 

è meno leggibile

String musician = "Lisa Coleman"; 

o addirittura di

String musician = "Lisa" + ' ' + "Coleman"; 

Quindi credo che non è per ragioni di leggibilità.

Immagino quindi che tu voglia una costante per evitare di ripetere te stesso in diverse porzioni di codice. Tuttavia, l'utilizzo di Character.SPACE anziché di ' ' ovunque non porta a meno ripetizioni. Solo per codice più prolisso e meno leggibile.

Immagino quindi che tu voglia essere in grado di cambiare il valore costante in un posto, e farlo cambiare ovunque sia usato. Tuttavia, l'utilizzo di una costante integrata Character.SPACE non consente di raggiungere tale obiettivo. Si sarebbe ancora necessario il proprio costante, e il suo nome non dovrebbe essere quello che è il valore, ma ciò che il valore è per:

private static final char FIRST_NAME_LAST_NAME_SEPARATOR = ' '; 

Ora, c'è una buona ragione per usare quella costante: se si più tardi decidi di usare una tab invece di uno spazio, puoi cambiare il valore della costante e ricompilare tutto il tuo codice.

+2

Intendevi "Lisa Coleman" o "Lisa Coleman" o "Lisa Coleman"? Uno ha un singolo spazio, un altro un doppio e un altro uno [spazio non frantumato] (https://en.wikipedia.org/wiki/Non-breaking_space). Forse non sei mai stato bruciato da tali ambiguità, ma io ho. –

+0

Quindi definire la propria costante, come suggerisce la mia risposta. Oppure scrivi un metodo che concatena le parti del nome con il separatore che desideri. Dov'è il problema? –

+1

Perché sarebbe sciocco definire la propria [DayOfWeek] (http://docs.oracle.com/javase/8/docs/api/java/time/DayOfWeek.html) costante o [Mese] (http: // docs.oracle.com/javase/8/docs/api/java/time/Month.html) costante se ne era già stata definita una. Allo stesso modo per definire le costanti per i caratteri Unicode. –

1

Java ha un elenco di costanti di carattere utilizzate per sostituire caratteri "non flessibili" come un backspace (rappresentato da \ r). l'elenco completo è disponibile all'indirizzo https://docstore.mik.ua/orelly/java-ent/jenut/ch10_05.htm Tuttavia ecco un paio di esempi:

\\  Backslash 
\r  Carriage Return 
\"  Double Quote (same for single Quote) 
\n  Newline 

Si ottiene l'idea. Spero che questo sia quello che stavi cercando dato che hai menzionato le costanti dei personaggi nel tuo titolo.

Modifica: quando si usano costanti di caratteri come caratteri, le circondano con virgolette singole anziché virgolette doppie. Pur essendo lunghi due (o più) caratteri, indicano un singolo carattere o una singola cifra binaria piuttosto che una stringa.

Nota: quando si tenta di confrontare il carattere "invio" nella funzione java.awt.event.KeyListener keyTyped, la costante di caratteredeve essere l'utente anziché la costante di carattere \r.

1

ci sono alcuni in Apache Commons

org.apache.commons.lang3.StringUtils.SPACE

more

Problemi correlati