2015-10-17 33 views
5

Czy Java zawiera jakiekolwiek stałe dla pojedynczych znaków, takie jak SPACE?Czy Java definiuje stałe dla dowolnych znaków, takich jak SPACJA?

Posiadanie nazw pobranych z Unicode przydałoby się podczas wykonywania manipulacji ciągami.

Chcę to:

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

... zamiast tego:

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

(nie mylić z klasą java.lang.Character)

Jeśli nic wiązane z Java, alternatywy?

+0

myślę, że to będzie exaplain: http://stackoverflow.com/a/21437830/460557 –

+0

Ktoś to zrobił: http://blog.code-cop.org/2007/08/java-unicode-constants.html Nie wiem, jak użyteczne jest posiadanie ** każdej ** nazwy Unicode o takiej nazwie. Proponuję tylko wymienić kilka * specjalnych *, których potrzebujesz (i nie, miejsce nie jest specjalne). – Andreas

Odpowiedz

7

Nie ma takiej stałej iz ważnych powodów, IMO.

Po co używać stałej na pierwszym miejscu w swoim przykładzie?

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

jest mniej czytelny niż

String musician = "Lisa Coleman"; 

lub nawet niż

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

więc myślę, że nie ma powodów czytelności.

Domyślam się, że chcesz stałej, aby uniknąć powtarzania się w kilku częściach kodu. Ale używanie wszędzie Character.SPACE zamiast ' ' nie prowadzi do mniejszej liczby powtórzeń. Tylko bardziej szczegółowy i mniej czytelny kod.

Zgaduję, że chcesz mieć możliwość zmiany stałej wartości w jednym miejscu i zmienić ją wszędzie, gdzie jest używana. Ale użycie wbudowanej stałej Character.SPACE nie pozwoli na osiągnięcie tego celu. Nadal musiałby swoją stałą, a jej nazwa nie powinna być, co jest wartością, ale jaką wartość ma dla:

private static final char FIRST_NAME_LAST_NAME_SEPARATOR = ' '; 

Teraz nie jest dobry powód, aby użyć tej stałej: Jeśli później zdecydujesz się użyć zakładki zamiast spacji, możesz zmienić wartość stałej i przekompilować cały swój kod.

+2

Czy chodziło Ci o 'Lisa Coleman' lub' Lisa Coleman' lub 'Lisa Coleman'? Jeden ma pojedynczą przestrzeń, drugą podwójną, a drugą [nie łamającą się przestrzeń] (https://en.wikipedia.org/wiki/Non-breaking_space). Być może nigdy nie spłonęły ci takie niejasności, ale ja. –

+0

Następnie zdefiniuj własną stałą, jak sugeruje moja odpowiedź. Lub napisz metodę łączącą części nazw z separatorem, który chcesz. Gdzie jest problem? –

+1

Bo byłoby głupio zdefiniować własną [DayOfWeek] (http://docs.oracle.com/javase/8/docs/api/java/time/DayOfWeek.html) stałą lub [Month] (http: // docs.oracle.com/javase/8/docs/api/java/time/Month.html) stała, jeśli jedna z nich została już zdefiniowana. Podobnie do definiowania stałych dla znaków Unicode. –

1

Java ma listę stałych znaków używanych do zastępowania znaków "untypeable", takich jak backspace (reprezentowane przez \ r). Pełną listę można znaleźć na https://docstore.mik.ua/orelly/java-ent/jenut/ch10_05.htm Jednak tutaj jest kilka przykładów:

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

Masz pomysł. Mam nadzieję, że właśnie tego szukałeś, ponieważ wspomniałeś o stałych znaków w swoim tytule.

Edytuj: Podczas używania stałych znaków jako znaków otaczają je pojedynczymi cudzysłowami zamiast podwójnymi cudzysłowami. Pomimo tego, że są długie (lub więcej) znaków, oznaczają one pojedynczy znak lub pojedynczą cyfrę binarną zamiast ciągu.

Uwaga: Przy próbie porównania znaku "enter" w funkcji keyTyped java.awt.event.KeyListener stała znakowa \n powinna być stałą użytkownika, a nie stałą postaci \r.

1

Są tacy w Apache Commons

org.apache.commons.lang3.StringUtils.SPACE

more