JavaRush /Blog Java /Random-PL /Klasa string w Javie

Klasa string w Javie

Opublikowano w grupie Random-PL
Klasa String w Javie została zaprojektowana do pracy z ciągami znaków w Javie. Wszystkie literały łańcuchowe zdefiniowane w programie Java (na przykład „abc”) są instancjami klasy String. Przyjrzyjmy się jego kluczowym cechom:
  1. Klasa implementuje interfejsy Serializablei CharSequence. Ponieważ jest zawarty w pakiecie java.lang, nie trzeba go importować.
  2. Klasa String w Javie jest klasą końcową i nie może mieć dzieci.
  3. Klasa String jest klasą niezmienną, co oznacza, że ​​jej obiektów nie można zmieniać po ich utworzeniu. Wszelkie operacje na obiekcie String, których efektem byłby obiekt klasy String, spowodują utworzenie nowego obiektu.
  4. Ze względu na swoją niezmienność obiekty klasy String są bezpieczne dla wątków i mogą być używane w środowisku wielowątkowym.
  5. Każdy obiekt w Javie można przekonwertować na ciąg znaków za pomocą metody toString, którą wszystkie klasy Java dziedziczą z tej klasy Object.
Klasa string w Javie - 1

Praca z ciągiem Java

Jest to jedna z najczęściej używanych klas w Javie. Posiada metody analizy niektórych znaków w ciągu, porównywania i wyszukiwania ciągów, wyodrębniania podciągów, tworzenia kopii ciągu ze wszystkimi znakami konwertowanymi na małe i wielkie litery i inne. Listę wszystkich metod klasy String można znaleźć w oficjalnej dokumentacji . Java implementuje także prosty mechanizm łączenia (łączenia ciągów znaków), konwertowania elementów pierwotnych na ciąg znaków i odwrotnie. Przyjrzyjmy się kilku przykładom pracy z klasą String w Javie.

Tworzenie ciągów

Najłatwiejszym sposobem utworzenia instancji klasy String jest przypisanie jej wartości literału łańcuchowego:
String s = "I love movies";
Jednakże klasa String posiada wiele konstruktorów , które umożliwiają:
  • utwórz obiekt zawierający pusty ciąg
  • utwórz kopię zmiennej łańcuchowej
  • utwórz ciąg znaków na podstawie tablicy znaków
  • utwórz ciąg znaków na podstawie tablicy bajtów (biorąc pod uwagę kodowanie)
  • itp.

Dodanie ciągu

Dodanie dwóch ciągów w Javie jest dość proste przy użyciu metody +. Java umożliwia dodawanie do siebie zarówno zmiennych, jak i literałów łańcuchowych:
public static void main(String[] args) {
    String day = "Dzień";
    String and = "I";
    String night = "Noc";

    String dayAndNight = day + " " + and + " " + night;
}
Dodając obiekty klasy String do obiektów innych klas, redukujemy te ostatnie do postaci string. Konwersja obiektów innych klas na reprezentację w postaci ciągu znaków jest wykonywana poprzez niejawne wywołanie metody toStringna obiekcie. Zademonstrujmy to na następującym przykładzie:
public class StringExamples {
    public static void main(String[] args) {
        Human max = new Human(„Maks”);
        String out = "obiekt javy: " + max;
        System.out.println(out);
        // Dane wyjściowe: Obiekt Java: Osoba o imieniu Max
    }

    static class Human {
        private String name;

        public Human(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return „Człowiek z imieniem” + name;
        }
    }
}

Porównanie ciągów

Aby porównać ciągi, możesz użyć metody equals():
public static void main(String[] args) {
    String x = "Test String";
    System.out.println("Test String".equals(x)); // true
}
Jeśli wielkość liter nie jest dla nas istotna przy porównywaniu ciągów, musimy zastosować metodę equalsIgnoreCase():
public static void main(String[] args) {
       String x = "Test String";
       System.out.println("test string".equalsIgnoreCase(x)); // true
}

Konwersja obiektu/prymitywu na ciąg znaków

Aby przekonwertować instancję dowolnej klasy Java lub dowolnego prymitywnego typu danych na reprezentację łańcuchową, możesz użyć metody String.valueOf():
public class StringExamples {
    public static void main(String[] args) {
        String a = String.valueOf(1);
        String b = String.valueOf(12.0D);
        String c = String.valueOf(123.4F);
        String d = String.valueOf(123456L);
        String s = String.valueOf(true);
        String human = String.valueOf(new Human("Alex"));

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(s);
        System.out.println(human);
        /*
        Wynik:
        1
        12.0
        123.4
        123456
        true
        Osoba o imieniu Alex
         */
    }

    static class Human {
        private String name;

        public Human(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return „Człowiek z imieniem” + name;
        }
    }
}

Konwersja ciągu na liczbę

Często trzeba przekonwertować ciąg na liczbę. Klasy opakowań typu pierwotnego mają metody, które służą dokładnie temu celowi. Wszystkie te metody zaczynają się od słowa parse. Rozważ tłumaczenie ciągu znaków na liczby całkowite ( Integer) i ułamkowe ( Double) poniżej:
public static void main(String[] args) {
    Integer i = Integer.parseInt("12");
    Double d = Double.parseDouble("12.65D");

    System.out.println(i); // 12
    System.out.println(d); // 12.65
}

Konwertowanie kolekcji ciągów na reprezentację ciągów

Jeśli chcesz przekonwertować wszystkie elementy jakiejś kolekcji ciągów na reprezentację ciągów znaków za pomocą dowolnego ogranicznika, możesz użyć następujących metod klasy Java String:
  • join(CharSequence delimiter, CharSequence... elements)
  • join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
Gdzie delimiterjest separatorem elementów i elementsjest instancją tablicy ciągów/kolekcji ciągów. Spójrzmy na przykład, w którym konwertujemy listę ciągów na ciąg znaków, oddzielając każdy z nich średnikiem:
public static void main(String[] args) {
    List<String> people = Arrays.asList(
            "Philip J. Fry",
            "Turanga Leela",
            "Bender Bending Rodriguez",
            "Hubert Farnsworth",
            "Hermes Conrad",
            "John D. Zoidberg",
            "Amy Wong"
    );

    String peopleString = String.join("; ", people);
    System.out.println(peopleString);
    /*
    Dane wyjściowe:
    Philip J. Fry; Turanga Leela; Bender Zginanie Rodriguez; Huberta Farnswortha; Hermesa Konrada; Johna D. Zoidberga; Amy Wong
     */
}

Dzielenie ciągu na tablicę ciągów

Operację tę wykonujemy metodą split(String regex) Separator jest wyrażeniem regularnym typu string regex. W poniższym przykładzie wykonamy operację odwrotną do tej, którą wykonaliśmy w poprzednim przykładzie:
public static void main(String[] args) {
    String people = "Philip J. Fry; Turanga Leela; Bender Bending Rodriguez; Hubert Farnsworth; Hermes Conrad; John D. Zoidberg; Amy Wong";

    String[] peopleArray = people.split("; ");
    for (String human : peopleArray) {
        System.out.println(human);
    }
    /*
    Produkcja:
    Philip J. Fry
    Turanga Leela
    Bender Bending Rodriguez
    Hubert Farnsworth
    Hermes Conrad
    John D. Zoidberg
    Amy Wong
     */
}

Określanie pozycji elementu w ciągu znaków

W języku Java String udostępnia zestaw metod określania pozycji znaku/podłańcucha w ciągu:
  1. indexOf(int ch)
  2. indexOf(int ch, int fromIndex)
  3. indexOf(String str)
  4. indexOf(String str, int fromIndex)
  5. lastIndexOf(int ch)
  6. lastIndexOf(int ch, int fromIndex)
  7. lastIndexOf(String str)
  8. lastIndexOf(String str, int fromIndex)
Gdzie:
  1. ch— symbol, którego szukasz ( char)
  2. str- szukana fraza
  3. fromIndex— pozycja, z której należy szukać elementu
  4. metody indexOf- zwracają pozycję pierwszego znalezionego elementu
  5. metody lastIndexOf- zwracają pozycję ostatniego znalezionego elementu
Jeśli szukany element nie zostanie znaleziony, metody zwrócą linię -1. Spróbujmy znaleźć numer seryjny liter A, K, Z, Яw alfabecie angielskim, ale pamiętajmy, że indeksowanie znaków w ciągu znaków w Javie zaczyna się od zera:
public static void main(String[] args) {
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    System.out.println(alphabet.indexOf('A')); // 0
    System.out.println(alphabet.indexOf('K')); // 10
    System.out.println(alphabet.indexOf('Z')); // 25
    System.out.println(alphabet.indexOf('Я')); // -1
}

Wyodrębnianie podciągu z ciągu

Aby wyodrębnić podciąg z łańcucha, klasa String w Javie udostępnia metody:
  • substring(int beginIndex)
  • substring(int beginIndex, int endIndex)
Przyjrzyjmy się, jak możemy wykorzystać metody pozycjonowania elementów i wyodrębniania podciągów, aby uzyskać nazwę pliku z jego ścieżki:
public static void main(String[] args) {
    String filePath = "D:\\Movies\\Futurama.mp4";
    int lastFileSeparatorIndex = filePath.lastIndexOf('\\');
    String fileName = filePath.substring(lastFileSeparatorIndex + 1);
    System.out.println(fileName); //9
}

Konwertuj ciąg na wielkie/małe litery:

Klasa String udostępnia metody konwersji ciągu znaków na wielkie i małe litery:
  • toLowerCase()
  • toUpperCase()
Przyjrzyjmy się, jak działają te metody na przykładzie:
public static void main(String[] args) {
    String fry = "Philip J. Fry";

    String lowerCaseFry = fry.toLowerCase();
    String upperCaseFry = fry.toUpperCase();

    System.out.println(lowerCaseFry); // philip j. fry
    System.out.println(upperCaseFry); // PHILIP J. FRY
}
Praca z tą klasą Java jest omawiana na początkowych poziomach kursu online JavaRush:

Dodatkowe źródła

Informacje o klasie String znajdują się także w innych artykułach społeczności JavaRush:
  1. Ciągi w Javie — w tym artykule omówiono podstawy pracy z ciągami w Javie.
  2. Ciąg Java. Pytania i odpowiedzi na rozmowie kwalifikacyjnej, część 1 — w tym artykule omówiono pytania podczas rozmowy kwalifikacyjnej na ten temat String, a także przedstawiono odpowiedzi na pytania wraz z wyjaśnieniami i przykładami kodu.
  3. Stringi w Javie (klasa java.lang.String) - w tym artykule dokonano głębszej analizy klasy String, a także omówiono zawiłości pracy z tą klasą.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION