Co to jest ciąg w Javie?
W programowaniu bardzo często używane są ciągi znaków. String w Javie to obiekt reprezentujący sekwencję znaków popartą tablicą char. Klasa String jest niezmienna w Javie i implementuje interfejsy Comparable , Serializable i CharSequence . Spójrzmy na przykład, aby zrozumieć.String str = "string"
Tutaj str jest sekwencją 6 znaków, którymi są s, t, r, i, n i g.
Indeks tablicy znaków | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
Wartość | S | T | R | I | N | G |
Adres pamięci | 0x12824 | 0x12825 | 0x12826 | 0x12827 | 0x12828 | 0x12829 |
Sposoby inicjalizacji łańcucha
Istnieją dwa sposoby inicjowania ciągu.- Literały łańcuchowe
- Nowy operator
Dosłowny ciąg
Najłatwiejszy i najbardziej bezpośredni sposób zadeklarowania ciągu znaków został zastosowany w powyższym przykładzie. Ilekroć kompilator interpretuje literał łańcuchowy, jest on zawsze konwertowany na obiekt String.String str = "string";
Nowy operator
Możemy także zainicjować ciąg używając operatora new.String strNew = new String("using new operator");
Przykład
import java.io.*;
import java.lang.*;
class StringInitializationExample {
public static void main(String[] args)
{
//declare java string with a string literal
String str = "a string literal";
System.out.println("String str = " + str);
//declare string using new operator
String strNew = new String("using new operator");
System.out.println("String strNew = " + strNew);
}
}
Wyjście
String str = literał łańcuchowy String strNew = użycie operatora new
String vs StringBuilder vs StringBuffer
Omówiliśmy już, czym jest klasa String, więc omówimy pozostałe dwie klasy i ich przeznaczenie, a także powód, dla którego Java wprowadziła te dwie klasy, skoro ma już dla nas klasę String. Lepiej będzie, jeśli pójdziesz na górę i przejrzysz klasę String, aby lepiej ją zrozumieć.Powód
Jak wiemy, obiekt klasy String jest niezmienny, więc ilekroć musimy zmienić ciąg, nigdy nie powoduje to mutacji bieżącego obiektu, ale zmieniona wartość jest zawsze przechowywana jako nowy obiekt String. Jeśli więc będziemy musieli wielokrotnie zmieniać wartość, pamięć również zostanie zużyta. Trzymając się tego punktu, Java udostępniła nam klasy StringBuilder i StringBuffer . Teraz zobaczymy, jak są one przydatne w tym scenariuszu.Bufor ciągów
String jest reprezentacją niezmiennej sekwencji znaków, ale StringBuffer jest zmienną sekwencją znaków . Wykorzystuje większość metod klasy String wraz z kilkoma własnymi do zmiany zawartości i sekwencji znaków. Jest bezpieczny dla wątków , ponieważ jego metody są zsynchronizowane do użytku przez wiele wątków, zachowując kolejność szeregową. Implementuje interfejsy Serializable , Appendable i CharSequence .Składnia
StringBuffer str = new StringBuffer("Happy Java Programming");
Konstruktor ciągów
StringBuilder reprezentuje również zmienną sekwencję znaków. Zapewnia interfejs API, który jest kompatybilny z klasą StringBuffer, ale nie jest bezpieczny dla wątków. Zatem tam, gdzie nie jest zaangażowanych wiele wątków, lepiej jest skorzystać z klasy StringBuilder , ponieważ w wielu przypadkach jest ona szybsza niż klasa StringBuffer . Kluczowymi metodami tej klasy są metoda wstawiania i dołączania. Implementuje także interfejsy Serializable , Appendable i CharSequence .Składnia
StringBuilder str = new StringBuilder("Happy Java Programming");
Operacje na ciągach
W Javie możemy wykonywać operacje na ciągach, takie jak łączenie , porównywanie , dzielenie , znajdowanie długości , zastępowanie ciągów i tak dalej.Metody ciągów
Klasa Java String udostępnia różne metody manipulowania ciągami znaków lub wykonywania omówionych powyżej operacji. Przyjrzyjmy się poniższej tabeli, aby zapoznać się z niektórymi metodami łańcuchowymi.Metody | Opis |
---|---|
Char charAt(int indeks) | Zwraca wartość char o podanym indeksie. |
Połączenie ciągu (String str) | Zwraca ciąg, łącząc określony ciąg na końcu tego ciągu. |
wartość logiczna zawiera (CharSequence s) | Zwraca wartość true, jeśli ciąg zawiera określoną sekwencję wartości znaków. |
zawartość logicznaEquals(CharSequence cs) | Dopasowuje ciąg znaków do podanej sekwencji znaków. |
zawartość logicznaEquals(StringBuffer sb) | Dopasowuje ciąg do dostarczonego bufora ciągu. |
wartość logiczna kończy się z (przyrostkiem ciągu) | Porównuje koniec łańcucha z podanym przyrostkiem. |
wartość logiczna równa się (obiekt i obiekt) | Dopasowuje ciąg do podanego obiektu. |
wartość logiczna równaIgnoreCase(String innyString) | Ta metoda porównuje dwa ciągi bez uwzględniania wielkości liter. |
statyczny format ciągu (format ciągu, obiekt… argumenty) | Zwraca sformatowany ciąg znaków, używając podanego formatu i argumentów. |
bajt getBytes() | Ta metoda wykorzystuje domyślny zestaw znaków platformy do kodowania ciągu znaków w sekwencji bajtów, który jest następnie zapisywany w nowej tablicy bajtów. |
void getChars(int Begin, int end, char[] dst, int dstBegin) | Kopiuje znaki z ciągu do docelowej tablicy znaków. |
int kod hash() | Zwraca kod skrótu dla ciągu. |
int indeksOf(int ch) | Zwraca indeks dla określonego znaku, który występuje jako pierwszy w ciągu. |
int indeksOf(int ch, int fromIndex) | Zwraca indeks dla określonego znaku, który występuje jako pierwszy, zaczynając od podanego indeksu w tym ciągu. |
int indeksOf(String str) | Wyszukuje podany podciąg w ciągu i zwraca indeks przy pierwszym wystąpieniu. |
int indeksOf(String str, int zindeksu) | Rozpoczyna wyszukiwanie podanego podciągu w ciągu znaków o podanym indeksie i zwraca indeks przy pierwszym wystąpieniu. |
Ciąg stażysta() | Ta metoda zwraca kanoniczną reprezentację ciągu. |
int lastIndexOf(int ch) | Ta metoda wyszukuje podany znak w ciągu i zwraca indeks ostatniego wystąpienia. |
int lastIndexOf(int ch, int fromIndex) | Ta metoda wyszukuje wstecz od podanego indeksu podany znak w ciągu i zwraca indeks ostatniego wystąpienia. |
int lastIndexOf(String str) | Ta metoda wyszukuje podany podciąg w ciągu i zwraca indeks ostatniego wystąpienia. |
int lastIndexOf(String str, int z indeksu) | Ta metoda wyszukuje wstecz od podanego indeksu podany podciąg w ciągu i zwraca indeks ostatniego wystąpienia. |
długość całkowita() | Ta metoda zwraca długość ciągu. |
dopasowania logiczne (wyrażenie regularne) | Zwraca wartość true lub false, dopasowując ciąg znaków do podanego wyrażenia regularnego. |
Zamień ciąg (znak stara wartość, char nowa wartość) | Ta metoda zwraca ciąg znaków po zastąpieniu całej podanej wartości oldValue nową wartością w ciągu. |
Rozdzielenie ciągu [] (wyrażenie regularne ciągu) | Ta metoda znajduje wszystkie dopasowania zgodnie z podanym wyrażeniem regularnym w ciągu znaków i dzieli je wokół tych dopasowań. |
wartość logiczna zaczyna się od (przedrostek ciągu) | Zwraca wartość true lub false, testując początek łańcucha z podanym przedrostkiem. |
Podciąg ciągu (int BeginIndex) | Ta metoda zwraca ciąg znaków będący podciągiem tego ciągu. |
Ciąg doLowerCase() | Konwertuje wszystkie znaki ciągu na małe litery, korzystając z domyślnych ustawień regionalnych. |
Przycinanie sznurka() | Ta metoda usuwa wszystkie początkowe i końcowe spacje z ciągu i zwraca je. |
statyczna wartość ciągu(znak c) | Zwraca ciąg znaków reprezentujący argument char. |
Przykład
import java.io.*;
import java.lang.*;
class JavaStringsExample {
public static void main(String[] args) {
//create a string
String greeting = "Hello! World";
System.out.println("String: " + greeting);
//getting the length of greeting object
int length = greeting.length();
System.out.println("Length: " + length);
//create first string
String first = "Java ";
System.out.println("First String: " + first);
//create second string
String second = "Programming";
System.out.println("Second String: " + second);
//joining two strings
String joinedString = first.concat(second);
System.out.println("Joined String: " + joinedString);
String jpf = "Java programming";
String jps = "Java programming";
String jpt = "Python programming";
//compare jpf and jps strings
boolean result1 = jpf.equals(jps);
System.out.println("Strings jpf and jps are equal: " + result1);
//compare jpf and jpt strings
boolean result2 = jpf.equals(jpt);
System.out.println("Strings jpf and jpt are equal: " + result2);
//converting jpf to uppercase
System.out.println("Upper case jpf: " + jpf.toUpperCase());
//replacing g character with v in jpf
System.out.println("Replacing g with v in jpf: "+jpf.replace("g", "v"));
}
}
Wyjście
Ciąg: Witam! Długość świata: 12 Pierwszy ciąg znaków: Java Drugi ciąg znaków: Programowanie Połączony ciąg: Programowanie w języku Java Ciągi jpf i jps są równe: true Ciągi jpf i jpt są równe: false Wielkie litery jpf: JAVA PROGRAMMING Zastępowanie g przez v w jpf: Java provramminv