V tomto díle si ukážeme jak jsou v Javě ukládány a zpracovávány textové informace.
20.8.2004 14:00 | Petr Hatina | přečteno 82910×
Řětězce slouží k ukládání textových informací. V Javě jsou vnitřně kódovány v UNICODE. Používají dvě základní objektové třídy - String
a StringBuffer
.
Třída String slouží k ukládání konstantních textových informací, které nehodláme (nebo jen málo) měnit. Hodnota v objektu typu String totiž je konstantní, při změně nebo přiřazení jiné hodnoty je vytvořen v paměti nový objekt a přiřazen původní proměnné. Původní hodnota objektu je posléze v paměti smazána. Což spotřebuje určitou časovou i systémovou režii.
Proto je pro ukládání textových informací, které jsou v programu častěji modifikovány, rozšiřovány či spojovány lépe použít třídu StringBuffer, které se budeme věnovat příště.
Proměnnou typu String lze obvykle inicializovat přiřazením textové konstanty:
String s= "Helo World";
Kromě přímého přiřazení pevné textové hodnoty můžeme řetězec inicializovat již při jeho deklaraci i jinak:
String s= new String() ; // prázdný řetězec String s= new String(String t); //rovnou překopíruje jiný řetězec String s= new String(char ch[] ); // řetězec z pole znaků String s= new StringBuffer(); // řetězec z objektu StringBuffer String s = new String(byte[] pole,"ISO8859_2") /*vytvoří a převede řetězec z pole znaků v jiné znakové sadě" */
Řetězce můžeme spojovat (s výhradou vůči optimalizaci, viz výše ) operátorem +
String Jmeno="Jan";String Prijmeni="Novak"; String Vizitka= Jmeno+ " "+ Prijmeni; System.out.println("Jeho inicialy jsou " + Jmeno+ " "+ Prijmeni);
Aktuální délku řetězce vrací metoda length :
int delka=Jmeno.length();
Co provádět nemůžeme, to je porovnání řetězců operátorem ==
,protože typ String je odkaz. Musíme použít jeho metodu equals
(resp. equalsIgnoreCase
) , která ignoruje rozdíly mezi velkými a malými písmeny).
String s1="Jan";boolean ok; ok=s1.equals("Jan"); //vraci true ok=s1.equals("jan"); //vraci false ok=s1.equalsIgnoreCase("jan"); //takhle je to OK ok=s1.equals("franta"); //vraci false
Potřebujeme-li při porovnání určit který z řetězců je větší, použijeme metodu compareTo
String s1="Jan"; int i=s1.compareTo("franta"); // vrací záporné číslo
Metoda compareTo vrací 0 pokud jsou oba řetězce stejné,záporné číslo pokud je porovnávaný řetězec menší než předaný poarametr a kladné číslo pokud je větší.
Pro porovnání zda text obsahuje pouze určité skupiny znaků slouží metoda matches
, která porovnává řetězec podle regulárních výrazů, tak jak je známe z linuxových příkazů. S regulárním výrazy pracují i metody replaceAll
, replaceFirst()
, které nahrazují část řetězce jiným textem. Regulárním výrazům v řetězcích budeme věnovat samostatnou kapitolu.
Jednotlivé znaky v řetězci lze měnit pomocí metody replace
:
String s="01234567890"; s=s.replace('0','X'); //změní všechny znaky 0 na X
K metodám, měnícím obsah řetězce patří také toUpperCase
a toLowerCase
, (převod na velká, resp. malá písmena), a trim
, která odstraňuje úvodní a koncové bílé znaky (tj.mezery, tabelátor, konec řádku).
Vyhledávat text v řetězci lze pomocí metody indexOf
, která vrací polohu podřetězce v řětězci, (tedy přesně řečeno, vrací index, takže se počítá od 0)
či startsWith
, která testuje zda řetězec začíná uvedeným textem.
Opačnou funkci, tedy vrácení řetězce na určité pozici obstarávají metody substring
a charAt
(ta vrací znak na pozici).
String s="01234567890" int poz= s.indexOf("456") //vyhledá pozici podřetězce v celém řetězci boolean ok=s.startsWith("0123") // String sub= s.substring(0,2); //vrací podřetězec od indexu 0 do 2-1