Fragment wykładu z mentorem w ramach kursu Codegym University. Zapisz się na pełny kurs.
„Cześć, Amigo! Dzisiaj przeanalizujemy kilka typowych scenariuszy pracy ze strunami. Na przykład, czy wiesz, jak podzielić strunę na kilka części?”
– Nie powiem ci od razu, Ellie. Ale ty mi powiesz, prawda?
split()
metoda
„Istnieje kilka sposobów, aby to zrobić. Pierwszym sposobem na podzielenie łańcucha na wiele części jest użycie metody split()
. Wyrażenie regularne, które definiuje specjalny łańcuch ograniczający, musi zostać przekazane jako parametr. Dowiesz się, czym jest wyrażenie regularne zadanie Kolekcje Java .
Przykład:
Kod | Wynik |
---|---|
|
Wynikiem będzie tablica trzech łańcuchów:
|
Proste, ale czasami takie podejście jest przesadne. Jeśli jest dużo ograniczników (na przykład spacji, znaków nowego wiersza, tabulacji, kropek), musisz skonstruować dość złożone wyrażenie regularne.
„Cóż, jasne. A jeśli jest to trudne do odczytania, trudno jest wprowadzić zmiany.
StringTokenizer
klasa
Fragment wykładu z mentorem w ramach kursu Codegym University. Zapisz się na pełny kurs.
„Java ma specjalną klasę, której całe zadanie polega na podzieleniu łańcucha na podciągi.
„Ta klasa nie używa wyrażeń regularnych: zamiast tego po prostu przekazujesz ciąg składający się z ograniczników. Zaletą tego podejścia jest to, że nie dzieli całego łańcucha na części na raz, ale zamiast tego przesuwa się od początku do końca o jeden krok po kroku.
Klasa ma konstruktora i dwie metody. Przekazujemy konstruktorowi ciąg znaków, który podzieliliśmy na części, oraz ciąg składający się z zestawu znaków ograniczających.
Metody | Opis |
---|---|
|
Zwraca następny podciąg |
|
Sprawdza, czy istnieje więcej podciągów. |
„Ta klasa w jakiś sposób przypomina mi klasę Scanner, która również ma metody nextLine()
i hashNextLine()
.
„To dobra obserwacja, którą poczyniłeś. Możesz utworzyć StringTokenizer
obiekt za pomocą tego polecenia:
StringTokenizer name = new StringTokenizer(string, delimiters);
Gdzie string jest łańcuchem, który ma zostać podzielony na części. A ograniczniki to ciąg znaków, a każdy znak w nim jest traktowany jako ogranicznik. Przykład:
Kod | Wyjście konsoli |
---|---|
|
|
„Zauważ, że każdy znak w łańcuchu przekazanym w drugim łańcuchu do StringTokenizer
konstruktora jest uważany za separator.
String.format()
metoda i StringFormatter
klasa
„Inną interesującą metodą klasy String jest metoda format()
.
„Powiedzmy, że masz różne zmienne przechowujące dane. Jak wyświetlić je na ekranie w jednym wierszu? Na przykład mamy trochę danych (lewa kolumna) i pożądane wyjście (prawa kolumna):
Kod | Wyjście konsoli |
---|---|
|
|
Kod takiego programu będzie wyglądał mniej więcej tak:
Kod programu |
---|
|
„Zgodzicie się ze mną, że kod jest mało czytelny. A gdyby nazwy zmiennych były dłuższe, to kod stałby się jeszcze trudniejszy:
Kod programu |
---|
|
„Tak, to trudna lektura!”
„Nie martw się. Jest to powszechna sytuacja w rzeczywistych programach, więc chcę ci opowiedzieć o sposobie pisania tego kodu w prostszy i bardziej zwięzły sposób.
String.format
„ String
Klasa posiada metodę statyczną format()
: pozwala określić wzór składania ciągu znaków z danymi. Ogólny wygląd polecenia jest następujący:
String name = String.format(pattern, parameters);
Przykład:
Kod | Wynik |
---|---|
|
|
|
|
|
|
„ format()
Pierwszym parametrem metody jest ciąg formatu, który zawiera cały żądany tekst wraz ze znakami specjalnymi zwanymi specyfikatorami formatu (takimi jak %d
i %s
) w miejscach, w których należy wstawić dane.
„ format()
Metoda zastępuje te %s
i %d
specyfikatory formatu parametrami, które następują po ciągu formatu na liście parametrów. Jeśli chcemy wstawić ciąg znaków, piszemy . %s
Jeśli chcemy wstawić liczbę, specyfikatorem formatu jest %d
. Przykład:
Kod | Wynik |
---|---|
|
s jest równe"a=1, b=4, c=3" |
„Oto krótka lista specyfikatorów formatu, których można użyć w ciągu formatu:
Specyficzny | Oznaczający |
---|---|
|
String |
|
interger: byte , short , int ,long |
|
liczba rzeczywista: float ,double |
|
boolean |
|
char |
|
Date |
|
% postać |
"Te specyfikatory wskazują typ danych, ale są też specyfikatory, które wskazują kolejność danych. Aby uzyskać argument według jego numeru (numeracja zaczyna się od jedynki), należy napisać " % 1$ d " zamiast " %d ". Przykład:
Kod | Wynik |
---|---|
|
s jest równe"a=13, b=12, c=11" |
%3$d
otrzyma trzeci argument, %2$d
otrzyma drugi argument i %d
otrzyma pierwszy argument. Specyfikatory formatu %s
i %d
odnoszą się do argumentów niezależnie od specyfikatorów, takich jak %3$d
lub%2$s
Basen sznurkowy
„Każdy ciąg określony w kodzie jako literał łańcuchowy jest przechowywany w obszarze pamięci zwanym podczas StringPool
działania programu. StringPool
Jest to specjalna tablica do przechowywania ciągów. Jej celem jest optymalizacja przechowywania ciągów:
„Po pierwsze, łańcuchy określone w kodzie muszą być gdzieś przechowywane, prawda? Kod składa się z poleceń, ale dane (zwłaszcza duże łańcuchy) muszą być przechowywane w pamięci oddzielnie od kodu. W kodzie pojawiają się tylko odniesienia do obiektów łańcuchowych.
„Po drugie, wszystkie identyczne literały łańcuchowe muszą być przechowywane w pamięci tylko raz. I tak to właśnie działa. Kiedy kod twojej klasy jest ładowany przez maszynę Java, wszystkie literały łańcuchowe są dodawane do, jeśli jeszcze ich tam nie ma StringPool
. już tam jest, po prostu używamy odwołania do ciągu z pliku StringPool
.
W związku z tym, jeśli przypiszesz ten sam literał do kilku zmiennych łańcuchowych w swoim kodzie, zmienne te będą zawierały to samo odwołanie. Literał zostanie dodany StringPool
tylko raz. We wszystkich innych przypadkach kod otrzyma odniesienie do łańcucha już załadowanego w pliku StringPool
.
Oto mniej więcej jak to działa:
Kod | Praca z StringPollem |
---|---|
|
|
„Dlatego zmienne a
i b
będą przechowywać te same odniesienia”.
„Mam nadzieję, że wszystko dobrze zrozumiałem.
intern()
metoda.
„A najlepsze jest to, że możesz programowo dodać dowolny ciąg do StringPool
. Aby to zrobić, wystarczy wywołać metodę String
zmiennej intern()
.
„ intern()
Metoda doda ciąg do, StringPool
jeśli jeszcze go tam nie ma, i zwróci odwołanie do ciągu w pliku StringPool
.
„A co się stanie, jeśli do metody StringPool
przy użyciu metody zostaną dodane dwa identyczne ciągi znaków intern()
?”
„Metoda zwróci te same referencje. Można jej użyć do porównania ciągów według referencji. Przykład:
Kod | Notatka |
---|---|
|
|
|
|
Jest mało prawdopodobne, aby często używać tej metody. To powiedziawszy, ludzie lubią o to pytać podczas rozmów kwalifikacyjnych.
„Więc lepiej o tym wiedzieć, niż nie wiedzieć. Dzięki, Ellie!”
GO TO FULL VERSION