Metody klasy String – Ciągi znaków są elementem, który jest praktycznie nieodłączną częścią pracy programisty. Java udostępnia klasę String do tworzenia i manipulowania ciągami znaków. Czyli, można poniekąd powiedzieć, że jest to jedna z ważniejszych klas w Javie. Dlatego zdecydowanie warto dobrze poznać metody tej klasy.
W tym tekście zostaną omówione najważniejsze metody klasy String wraz z przykładami użycia.
Spis treści
- 1 Java – String – Metody – wprowadzenie
- 2 String trim
- 3 String toUpperCase
- 4 String toLowerCase
- 5 String isEmpty
- 6 String length
- 7 String charAt
- 8 String toCharArray
- 9 String substring
- 10 String subSequence
- 11 String split
- 12 String replace
- 13 String matches
- 14 String indexOf
- 15 String equals
- 16 String concat
- 17 String startsWith
- 18 String endsWith
- 19 String contains
- 20 String compareTo
- 21 String getBytes
- 22 Java – String – Przykłady
- 23 Java – String – Metody – podsumowanie
- 24 Kierunek Java
- 25 20+ BONUSOWYCH materiałów z programowania
Java – String – Metody – wprowadzenie
Z tego materiału dowiesz się:
- Jakie metody oferuje klasa String?
String trim
public String trim()
Zadaniem metody trim jest pozbycie się wszystkich białych znaków na początku i końcu stringa.
String str = " Java "; String actualValue = str.trim(); String expectedValue = "Java";
String toUpperCase
public String toUpperCase(Locale locale)
public String toUpperCase()
Metoda toUpperCase zamienia wszystkie znaki w stringu na wielkie litery. Jako opcjonalny argument przyjmuje ustawienia regionalne. W przypadku jego braku metoda przyjmie domyślną wartość: Locale.getDefault().
String str = "Java"; String actualValue = str.toUpperCase(); String expectedValue = "JAVA";
String toLowerCase
public String toLowerCase(Locale locale)
public String toLowerCase()
Metoda toLowerCase zamienia wszystkie znaki w stringu na małe litery. Jako opcjonalny argument przyjmuje ustawienia regionalne. W przypadku jego braku metoda przyjmie domyślną wartość: Locale.getDefault().
String str = "Java"; String actualValue = str.toLowerCase(); String expectedValue = "java";
String isEmpty
public boolean isEmpty()
Metoda isEmpty zwraca prawdę, jeżeli string jest pusty, czyli jeżeli jego długość równa się 0.
String strNotEmpty= "Java"; String strEmpty = ""; assertFalse(strNotEmpty.isEmpty()); assertTrue(strEmpty.isEmpty());
String length
public int length()
Metoda length zwraca długość ciągu znaków.
String str = "Java"; int actualValue = str.length(); int expectedValue = 4;
String charAt
public char charAt(int index)
Metoda charAt zwraca znak znajdujący się pod wskazanym indeksem. W przypadku przekroczenia zakresu indeksu wyrzuci wyjątek: StringIndexOutOfBoundsException.
String str = "Java"; char actualValue = str.charAt(1); char expectedValue = 'a';
String toCharArray
public char[] toCharArray()
Metoda toCharArray zwraca tablicę wszystkich znaków składającą się na ciąg znaków.
String str = "Java"; char[] actualValue = str.toCharArray(); char[] expectedValue = {'J','a','v','a'}; assertArrayEquals(expectedValue, actualValue);
String substring
public String substring(int beginIndex, int endIndex)
public String substring(int beginIndex)
Metoda substring zwraca wybrany fragment ciągu znaków o podanym zakresie indeksów.
String str = "Java"; String actualValue = str.substring(1, 3); String expectedValue = "av";
String subSequence
public CharSequence subSequence(int beginIndex, int endIndex)
Metoda subSequence działa analogicznie do substring, jedyną różnicą jest to, że zwraca bardziej ogólny interfejs: CharSequence.
String str = "Java"; CharSequence actualValue = str.subSequence(1, 3); CharSequence expectedValue = "av";
String split
public String[] split(String regex, int limit)
public String[] split(String regex)
Metoda split na podstawie wyrażenia regularnego rozbija ciąg znaków na fragmenty. Opcjonalny argument: limit ogranicza długość wynikowej tablicy. Po jego przekroczeniu reszta nierozbitego na fragmenty tekstu zostanie zwrócona jako ostatni jej element.
Poniżej przykłady wraz z opisem.
// 1 String str = "Java 8"; String[] actualValue = str.split(" "); String[] expectedValue = {"Java", "8"}; assertArrayEquals(expectedValue, actualValue); // 2 str = " Ja va 8 "; actualValue = str.split(" "); expectedValue = new String[]{"", "Ja", "", "va", "8"}; assertArrayEquals(expectedValue, actualValue); // 3 str = "Ja1va 8"; actualValue = str.split("[0-9]"); expectedValue = new String[]{"Ja", "va "}; assertArrayEquals(expectedValue, actualValue); // 4 str = "Java 8"; actualValue = str.split("", 4); expectedValue = new String[]{"J", "a", "v", "a 8" }; assertArrayEquals(expectedValue, actualValue);
- Split dzieli ciąg znaków na fragmenty oddzielone spacją.
- Jeżeli po podziale tekstu na fragmenty zostaną na końcu puste stringi, nie zostaną one uwzględnione w wynikowej tablicy.
- Metoda split obsługuje również wyrażenia regularne.
- Jeżeli metoda split jako argument przyjmie pusty string, w wynikowej tablicy będzie ciąg znaków podzielony na pojedyncze znaki (stringi o długości 1). Dodatkowo w przykładzie wykorzystano argument limit, po którego przekroczeniu ciąg znaków przestaje być rozbijany na kolejne fragmenty.
String replace
public String replace(CharSequence target, CharSequence replacement)
public String replace(char oldChar, char newChar)public String replaceAll(String regex, String replacement)
public String replaceFirst(String regex, String replacement)
Metoda replace służy do zamiany jednego fragmentu tekstu na drugi. Istnieje kilka różnych możliwości podmiany tekstu jak zamiana tylko pierwszego wystąpienia, wszystkich wystąpień lub wykorzystanie wyrażeń regularnych.
Poniżej przykłady wraz z opisem.
// 1 String str = "Java 8"; String actualValue = str.replace("a", "A"); String expectedValue = "JAvA 8"; assertEquals(expectedValue, actualValue); // 2 str = "aaa"; actualValue = str.replace("aa", "AA"); expectedValue = "AAa"; assertEquals(expectedValue, actualValue); // 3 str = "aaa"; actualValue = str.replaceFirst("a", "A"); expectedValue = "Aaa"; assertEquals(expectedValue, actualValue); // 4 str = "aaa"; actualValue = str.replaceAll("aa", "AA"); expectedValue = "AAa"; assertEquals(expectedValue, actualValue); // 5 str = "Ja1va 8"; actualValue = str.replaceAll("[0-9]", "x"); expectedValue = "Jaxva x"; assertEquals(expectedValue, actualValue);
- Najprostsze wywołanie demonstrujące zamianę wszystkich wystąpień litery: 'a’ na 'A’.
- Podmiana pasujących stringów robiona jest od lewej do prawej strony. Dlatego, jeżeli jeden fragment tekstu zostanie już podmieniony, to nie będzie wykorzystany po raz kolejny.
- Zamiana tylko pierwszego pasującego wystąpienia
- Zamiana wszystkich pasujących wystąpień.
- Metoda replaceAll może przyjmować również wyrażenia regularne.
String matches
public boolean matches(String regex)
Metoda matches na podstawie wyrażenia regularnego stwierdza czy string pasuje do wzorca.
String str = "Java 8"; assertTrue(str.matches("Java 8")); assertTrue(str.matches("Java [0-8]")); assertTrue(str.matches("J(.*)")); assertTrue(str.matches("J(.?)v[a-z] (.*)"));
String indexOf
public int indexOf(String str, int fromIndex)
public int indexOf(int ch)
public int indexOf(String str)public int lastIndexOf(int ch, int fromIndex)
public int lastIndexOf(int ch)
Metoda indexOf wyszukuje podanego ciągu znaków i zwraca indeks pierwszego znalezionego wystąpienia. Opcjonalnie można podać indeks, od którego ma rozpocząć się przeszukiwanie lub skorzystać z metody: lastIndexOf w celu znalezienia ostatniego wystąpienia.
String str = "Java 8"; int actualValue = str.indexOf("a"); int expectedValue = 1; assertEquals(expectedValue, actualValue); str = "Java 8"; actualValue = str.lastIndexOf("a"); expectedValue = 3; assertEquals(expectedValue, actualValue);
String equals
public boolean equals(Object anObject)
public boolean equalsIgnoreCase(String anotherString)
Metoda equals wykorzystywana jest do porównywania ze sobą stringów po wartości. Ponieważ stringi są obiektami operator == nawet dla takich samych ciągów znaków może zwrócić false. Istnieje również metoda equalsIgnoreCase wykorzystywana do porównywania stringów, która ignoruje wielkość znaków.
String str = "Java 8"; assertTrue(str.equals("Java 8")); assertTrue(str.equalsIgnoreCase("JAVA 8"));
String concat
public String concat(String str)
Dzięki metodzie concat można łączyć ze sobą stringi. Podobny efekt można osiągnąć przez operator +. Więcej na temat samej konkatenacji stringów oraz kłopotów z wydajnością można przeczytać w artykule o StringBuilder.
String str = "Java"; String actualValue = str.concat(" ").concat("8"); String expectedValue = "Java 8"; assertEquals(expectedValue, actualValue); str = "Java"; actualValue = str + " " + "8"; expectedValue = "Java 8"; assertEquals(expectedValue, actualValue);
String startsWith
public boolean startsWith(String prefix, int toffset)
public boolean startsWith(String prefix)
Metoda startWith sprawdza, czy string zaczyna się od wskazanego ciągu znaków. Opcjonalnie można podać indeks, od którego ma rozpocząć przeszukiwanie.
String str = "Java 8"; assertTrue(str.startsWith("Ja")); assertTrue(str.startsWith("ava", 1));
String endsWith
public boolean endsWith(String suffix)
Metoda endsWith sprawdza, czy string kończy się od wskazanego ciągu znaków.
String str = "Java 8"; assertTrue(str.endsWith("8"));
String contains
public boolean contains(CharSequence s)
Metoda contains sprawdza, czy string zawiera dany ciąg znaków.
String str = "Java 8"; assertTrue(str.contains("8"));
String compareTo
public int compareTo(String anotherString)
Dzięki compareTo można porównać stringi według porządku leksykograficznego. Jeżeli oba stringi są sobie równe według metody equals, to metoda compareTo zwróci 0, jeżeli pierwszy ciąg znaków jest większy, to wynik będzie mniejszy od 0, w przeciwnym wypadku wynik będzie większy od 0. Istnieje również metoda compareToIgnoreCase, która dodatkowo przy porównywaniu ignoruje wielkość znaków.
// 1 String str1 = "aaa"; String str2 = "bbb"; int actualValue = str1.compareTo(str2); assertTrue(actualValue < 0); // 2 str1 = "aaa"; str2 = "bbb"; actualValue = str2.compareTo(str1); assertTrue(actualValue > 0); // 3 str1 = "aaa"; str2 = "aaa"; actualValue = str2.compareTo(str1); assertEquals(0, actualValue); // 4 str1 = "AAA"; str2 = "aaa"; actualValue = str2.compareToIgnoreCase(str1); assertEquals(0, actualValue);
String getBytes
public byte[] getBytes()
Metoda getBytes zamienia stringa na tablicę bajtów.
String str = "Java"; byte[] actualValue = str.getBytes(); byte[] expectedValue = {'J', 'a', 'v', 'a'}; assertArrayEquals(expectedValue, actualValue);
Java – String – Przykłady
Dodatkowe przykłady wykorzystania niektórych metod z klasy String znajdziesz w materiale poniżej.
➡ ZOBACZ 👉: String – przykłady i testy
Java – String – Metody – podsumowanie
W ramach tego materiału dowiedzieliśmy się, jakie metody oferuje klasa String. Bliżej zapoznaliśmy się z działaniem i przykładami poszczególnych metod tej klasy. Jeżeli chcesz kontynuować swoją przygodę z Javą i poznać inne struktury, które oferuję ten język programowania – to zapraszam do kolejnego tematu z serii o Javie. Kolejny temat będzie rozszerzeniem zagadnienia klasy String, ponieważ pomówimy o właściwościach string’a.
➡ ZOBACZ 👉: String – najważniejszy typ danych
Kierunek Java
W serii o Javie zapoznajesz się z podstawowymi tematami o Javie. Jeżeli chcesz bardziej kompleksowo zagłębić się w temat Javy, poczytać, posłuchać o Javie, to zachęcam Cię do zapoznania się z moim kursem „Kierunek Java”:
➡ ZOBACZ 👉: Kierunek Java
20+ BONUSOWYCH materiałów z programowania
e-book – „8 rzeczy, które musisz wiedzieć, żeby dostać pracę jako programista”,
e-book – „Java Cheat Sheet”,
checklista – „Pytania rekrutacyjne”
i wiele, wiele wiecej!
2 Comments
Cześć ja tu widzę małą nieścisłość z mojej wiedzy metoda charAt() zwraca wyjątek:
IndexOutOfBoundsException – if the index argument is negative or not less than the length of this string.
Cześć Artur! Dzięki za czujność.
Metoda tak, jak piszesz, deklaruje, że zwraca wyjątek: IndexOutOfBoundsException – jednak implementacja zwraca: StringIndexOutOfBoundsException, który dziedziczy po: IndexOutOfBoundsException.
Zobacz tutaj:
https://docs.oracle.com/javase/9/docs/api/java/lang/StringIndexOutOfBoundsException.html