JavaRush /Blog Java /Random-PL /Uciekanie znaków w Javie
Oleksandr Klymenko
Poziom 13
Харків

Uciekanie znaków w Javie

Opublikowano w grupie Random-PL
Coś poszło nie tak! Artykuł ten został napisany jako zadanie testowe na stanowisko w zespole JavaRush. I został napisany jako pełnoprawny wykład. Dzięki temu gwarantuję Ci jakość i ilość przydatnej wiedzy zgromadzonej w tym poście. Oprócz informacji praktycznych i teoretycznych w artykule znajdują się ciekawostki, o których być może nawet nie miałeś pojęcia! Ucieczka ze znaków w Javie - 1Witaj świecie! Ucieczka postaci jest bardzo ciekawym i niezbędnym rozwiązaniem technicznym. Potrzeba ucieczki przed znakami odegrała ważną rolę w historii całej branży programistycznej. W tym artykule porozmawiamy o tym, czym jest ucieczka znaków, dlaczego istnieje potrzeba ucieczki przed nimi i jak zaimplementowano ucieczkę znaków w Javie. W artykule podane zostaną przykłady i ciekawostki związane z tematem ucieczki postaci. Miłego czytania! Wszystkie informacje w systemie komputerowym są reprezentowane w formie tekstu, który na niższym poziomie jest reprezentowany przez bajty. Pisząc list lub wiadomość, wpisujemy tekst, który będzie dla danej osoby zrozumiały. Kiedy piszemy kod w IDE, wpisujemy tekst, który kompilator może przeanalizować. W Javie tekst może być reprezentowany jako typ, Stringktórego dane są reprezentowane przez znaki kontrolne – pary cudzysłowów.
String str = "Hello World!";
Z tekstem „Hello World!” nie ma żadnych problemów, ale co, jeśli ten sam tekst wymaga podkreślenia w mowie bezpośredniej? Korzystając z zasad gramatyki, staje się jasne, że tekst „Hello World!”, oprócz znaków kontrolnych z typu String, musi zostać umieszczony w bezpośrednim cudzysłowie mowy.
String str = "Java said, "Hello World!"";
Ta opcja nie będzie działać, ponieważ kompilator po prostu nie zrozumie, w którym momencie kończy się inicjalizacja zmiennej str. Aby rozwiązać ten i podobne problemy, wymyślono znaki ucieczki , czyli zmianę znaków kontrolnych na tak zwane sekwencje kontrolne, zwane także sekwencjami ucieczki . Poniżej znajduje się lista prawidłowych sekwencji ucieczki Java do użycia w ciągach znaków. \t — Znak tabulatora (w Javie – odpowiednik czterech spacji); \b— Znak powrotu w tekście o krok wstecz lub usunięcie jednego znaku w linii (backspace); \n— Nowy symbol linii; \r— symbol powrotu przewozu; \f— Przejdź do początku następnej strony; \'— Znak pojedynczego cudzysłowu; \"— Znak podwójnego cudzysłowu; \\— Znak ukośnika odwrotnego ( \). Teraz podkreślmy bezpośrednią mowę w naszej frazie, aby kompilator mógł łatwo przeanalizować to, co jest napisane.
String str = "Java said, \"Hello World!\"";
Zatem napisany tekst jest zrozumiały zarówno dla kompilatora, jak i osoby, jeśli zawartość zmiennej strzostanie wyświetlona na ekranie. Dowiedzieliśmy się, czym jest ucieczka postaci i dlaczego jest potrzebna. I nawet uniknęli znaku podwójnego cudzysłowu! Przejdźmy do analizy pozostałych sekwencji ucieczki.
Co jeszcze warto przeczytać:

Grupa programistów Java:

Znak tabulacji w wierszu jest wskazywany przez sekwencję ucieczki \ti jest analogiczny do czterech spacji. Jeśli jednak długość ciągu znaków składającego się z czterech spacji jest równa długości czterech znaków, to długość ciągu znaków ze znakiem tabulacji będzie równa jeden. Znak tabulacji jest często używany do konstruowania tabel lub pseudograficznych elementów interfejsu, ponieważ... Jest to wygodniejsze niż pisanie czterech spacji. Poniżej znajduje się przykład interfejsu pseudograficznego. Ucieczka ze znaków w Javie - 2Spośród wszystkich sekwencji ucieczki symbol jest \bchyba najciekawszy, ponieważ pozwala nam usunąć ostatni znak z linii wyjściowej, podobnie jak gdybyśmy go usunęli, naciskając klawisz Backspace .
System.out.print("2 + 2 = 5"); // Ekran wyświetla 2 + 2 = 5
System.out.print("\b");// Ekran wyświetla 2 + 2 =
System.out.print("4");// Ekran wyświetla 2 + 2 = 4
Symbole \nmają \rwspólną historię – przyjrzyjmy się im razem. Być może spotkałeś się już wcześniej ze znakiem podziału wiersza \n. Na przykład, jeśli metoda println()wyprowadza informację w taki sposób, że następny wynik będzie w nowej linii, to metoda print()nie wykonuje podziału wiersza po wyniku, ale jeśli dodasz znak na końcu wyniku \n, wówczas nastąpi podział wiersza będzie wystawiany.
System.out.print("Następne wyjście będzie w nowej linii\n");
System.out.println(„Następne wyjście będzie w nowej linii”);
Znak powrotu karetki \rpozwala nam cofnąć kursor na początek linii wyjściowej i wyświetlić nowe informacje tak, jakby nic wcześniej nie było w tej linii.
System.out.print(„Tekst do przepisania”.);//Ekran wyświetla „Tekst do przepisania”.
System.out.print('\r');//Ekran jest pusty
System.out.print(„Nowy tekst”.);//Ekran wyświetla „Nowy tekst”.
Tak naprawdę powrót karetki sięga czasów, gdy tekst drukowano na maszynach do pisania. Aby wykonać przesunięcie wiersza, należało przesunąć karetkę i opuścić dźwignię (część mechanizmu maszyny do pisania), po czym nastąpi przesunięcie wiersza. Jeżeli dźwignia nie została opuszczona, można było kontynuować drukowanie w tej samej linii. To właśnie obserwujemy, wyświetlając symbol \r. W związku z tym, gdy programista chciał dokonać podziału wiersza, z przyzwyczajenia wykonywał ciąg znaków na końcu wyniku \r\n. Gdy era maszyn do pisania dobiegła końca, pokolenie programistów nadal korzystało z tej sekwencji, chociaż sami nigdy nie pracowali przy maszynie do pisania. Często zapominali, w jakiej kolejności musieli wykonać daną sekwencję - \r\nlub \n\r. Wtedy z pomocą przyszło im słowo testowe return, w którym wyraźnie widoczna była kolejność wyświetlania tych symboli. Jednak później, tworząc oprogramowanie dla pierwszych wersji systemu Windows, po MS-DOS, programiści zmuszeni byli stosować sekwencję \r\n. Teraz nie musisz się tym martwić i do przerwania linii użyj wyłącznie znaku \n. Ucieczka ze znaków w Javie - 3Cofnijmy się jeszcze raz w czasie, w okolice lat 80-tych. To właśnie wtedy popularny stał się symbol oznaczający przejście \fdo początku następnej strony. W tamtych czasach istniały drukarki wielkoliniowe, do pracy z którymi trzeba było napisać kod programu zawierający co i jak drukarka ma drukować. Aby wskazać, że tekst należy rozpocząć od nowej strony, zastosowano symbol \f. W naszych czasach ten symbol już dawno stracił na znaczeniu i jest mało prawdopodobne, że kiedykolwiek go spotkasz. Wymiary drukarki liniowej robią wrażenie. Ucieczka ze znaków w Javie - 4Z symbolami \’i \\wszystko jest dokładnie tak samo jak z ucieczką od podwójnego cudzysłowu, przykład był na początku artykułu. Będziesz musiał na przykład uciec od pojedynczego cudzysłowu, aby zainicjować typ znaku pojedynczym cudzysłowem.
char ch = '\'';
Ucieknij od znaku ukośnika odwrotnego, aby wskazać, że następujący znak nie będzie częścią sekwencji ucieczki.
System.out.println("\\n - sekwencja ucieczki końca wiersza");
// Wyjście: \n - sekwencja ucieczki końca wiersza
W praktyce często podczas pracy ze ścieżkami trzeba unikać ukośników odwrotnych:
System.out.println("It's Java string: \"C:\\Program Files\\Java\\jdk1.7.0\\bin\"");
// Dane wyjściowe: Ciąg znaków Java: „C:\Program Files\Java\jdk1.7.0\bin”
Podkreśliłem, że te sekwencje specjalne są używane w ciągach znaków (literałach łańcuchowych), ponieważ reszta służy do opisu wyrażeń regularnych klas Patterni nie ma związku z tematem tego artykułu. Tutaj możesz zobaczyć listę wszystkich sekwencji ucieczki dla tej klasy Pattern. Warto jednak zaznaczyć, że wyrażeń regularnych w takiej formie, w jakiej obecnie istnieją, nie można sobie wyobrazić bez użycia sekwencji ucieczki, nie tylko w Javie, ale także w innych popularnych językach programowania, np. PHP. W Javie zmiana znaczenia znaków jest również używana przy formatowaniu ciągów. Na przykład, określając format ciągu do wyświetlania symbolu procentu, należy zduplikować symbol procentu - %%, w przeciwnym razie pojawi się błąd, a IDE poprosi o dodanie procentu.
System.out.printf(„Procent tłuszczu w mleku: %d%%”, 10);
// Procent tłuszczu mlecznego: 10%
Na tym kończy się artykuł. Mam nadzieję, że nauczyłeś się wiele o ucieczce postaci i tym, jak zastosować ją w praktyce. Ucieczka znaków jest nieodłącznym elementem wielu języków programowania. W Javie, podobnie jak w innych językach podobnych do C, technologia ta jest zaimplementowana niemal identycznie. Dlatego wiedza zdobyta w tym artykule może przydać się nie tylko w Javie. Dziękuję za uwagę i życzę powodzenia w nauce!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION