14. Řetězce Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a
String (z balíku java.lang ). Objekt typu String je
konstantní řetězec (nelze ho modifikovat). Pokud potřebujeme vytvořit
řetězec, který lze libovolně měnit, musíme pro něj použít objekt typu
StringBuffer . S instancemi třídy String zachází v některých případech kompilátor jako by to byly
primitivní typy. Například pokud narazí ve zdrojovém textu na text uzavřený
v uvozovkách, vytvoří pro něj automaticky objekt typu String . Rovněž
operátor "+" slouží pro spojování řetězců.
14.1. Třída StringVytvoření konstantního řetězce lze provést dvěma způsoby:
String text1 = "Ahoj světe.";
String text2 = new String("I love TeX.");
Pokud máme vytvořen objekt typu String můžeme na něj uplatnit
následující veřejné metody (uvedeny jsou jen některé):
- Veřejné konstruktory:
String(),
String(String s), String(char ch[]), String(char ch[], int
od, int poc), String(StringBuffer sb),
- public char charAt(int i) - zjistí znak, který se nalézá
na zadané pozici i,
- public int compareTo(String s) - porovná lexikograficky
dva řetězce a vrací 0, pokud jsou si řetězce rovny, zápornou hodnotu, pokud je
řetězec s "menší", nebo kladnou nenulovou hodnotu, pokud je řetězec
s "větší",
- public int length() - vrací aktualní délku řetězce,
- public String replace(char zi1, char zi2) - zamění všechny
výskyty znaku zi1 za znak zi2,
- public String substring(int si, int ei), String
substring(int si) - vytvoří nový řetězec jehož obsahem je podřetězec
začínající indexem si a zahrnující zbytek řetězce, nebo podřetězec
začínající indexem si a končící indexem (ei-1),
- public String concat(String s) - spojí dva
řetězce (obdoba operátoru "+"),
- public String trim() - odstraní bílé znaky na začátku a konci
řetězce, (1)
- public char[] toCharArray() - převede řetězec
na pole znaků,
- public String toLowerCase() - provede konverzi velkých písmen na
malá,
- public String toUpperCase() - provede konverzi malých písmen na
velká,
- public int indexOf(int ch), indexOf(String S),
indexOf(int ch, int od), indexOf(String S, int od) -
vrací pozici prvního výskytu znaku nebo podřetězce v řetězci,
- public int lastIndexOf(int ch),
lastIndexOf(String s),
lastIndexOf(int ch, int od),
lastIndexOf(String s, int od)
- vrací pozici posledního výskytu znaku nebo podřetězce v řetězci.
Priklad 14.1. |
String text1 = " AhOJ BlaBlA ";
String text2 = text1.toUpperCase();
String text3 = text2.trim();
|
|
14.2. Třída StringBufferTřída StringBuffer je definována v balíku java.lang . Na rozdíl od
třídy String lze řetězec tohoto typu modifikovat.
Modifikovatelnosti třídy StringBuffer využívá i překladač, který sekvenci:
x = "0x"+2
přeloží jako
x = new StringBuffer.append("0x").append(2).toString
Pro deklaraci proměnné lze použít tento zápis:
StringBuffer text = new StringBuffer("Linux.");
Pokud chceme vytvořit modifikovatelný řetězec o určité délce zvolíme tuto
deklaraci:
StringBuffer text = new StringBuffer(100);
Pro práci s řetězcem typu StringBuffer jsou k dispozici
metody:
- public StringBuffer append(...) - přidá na konec řetězce řetězec,
- public int capacity() vrací maximální možnou délku řetězce (kapacitu),
- public char charAt(int i) - vrací znak na zadané pozici,
- public StringBuffer insert(int i,...) - vloží řetězec na pozici i,
- public int length() - vrací aktuální délku řetězce,
- public void setCharAt(int i, char ch) - změní znak na pozici i,
- public void setLength() - nastaví novou délku řetězce,
- public String toString() - zkonvertuje
StringBuffer na String ,
Metody append() a insert() umožňují zadat jako parametr
všechny primitivní datové typy, objekt typu String a pole znaků. Z tohoto
důvodu nejsou uvedeny všechny varianty těchto metod, a místo parametru je
uveden symbol tří teček.
14.3. Konverze hodnoty datového typu na řetězecVelmi často potřebujeme převést řetězec na číselnou hodnotu nebo naopak.
K převodu z hodnoty primitivního datového typu na řetězec nabízí třída String
několik verzí statické metody valueOf() : (2)
String valueOf( primitivníDatovýTyp proměnná )
String valueOf(Object obj)
String valueOf(char[] data)
String valueOf(char[] data, int pocatek, int pocet)
Parametry:
- data - pole znaků,
- pocatek - pozice v poli, odkud se má začít konvertovat,
- pocet - počet převáděných znaků.
Priklad 14.2. |
String text = String.valueOf(3.1415);
System.out.println("Tak vypadá šestnáctka:"+16);
|
|
14.4. Konverze řetězce na hodnotu datového typuPro převod řetězce na hodnotu datového typu je zapotřebí použít metod ze tříd
Byte , Integer , Long , Double , Float ,
Boolean , Short z balíku java.lang (3)
umožňující pracovat s primitivními datovými typy jako s objekty. Všechny tyto
třídy obsahují příslušnou verzi metody valueOf() , která vrací
řetězec zkonvertovaný na příslušnou třídu datového typu:
public static Integer valueOf(String s)
public static Integer valueOf(String s, int zaklad)
public static Double valueOf(String s)
public static Float valueOf(String s)
public static Long valueOf(String s)
public static Long valueOf(String s, int zaklad)
public static Boolean valueOf(String s)
public static Byte valueOf(String s)
public static Byte valueOf(String s, int zaklad)
public static Short valueOf(String s)
public static Byte valueOf(String s, int zaklad)
Parametry:
- s - je konvertovaný řetězec,
- zaklad - udává základ číselné soustavy (není-li uveden, je
zvolena soustava desítková).
Všechny tyto metody navíc vyvolávají výjimku
NumberFormatException v případě chybného formátu řetězce s.
Po vytvoření instance je třeba ještě provést konverzi na primitivní datový typ
některou z metod:
public int intValue()
public long longValue()
public float floatValue()
public double doubleValue()
public boolean booleanValue()
public byte byteValue()
public byte shortValue()
Třídy Byte , Integer , Short a Long nabízí
navíc metody pro převody:
- public static byte parseByte(String s) - na byte
z desítkové soustavy,
- public static byte parseByte(String s, int zaklad) - na
byte z libovolné soustavy.
- public static int parseInt(String s) - na int
z desítkové soustavy,
- public static int parseInt(String s, int zaklad) - na int
z libovolné soustavy,
- public static short parseShort(String s) - na short
z desítkové soustavy,
- public static short parseShort(String s, int zaklad) - na
short z libovolné soustavy.
- public static long parseLong(String s) - na long
z desítkové soustavy,
- public static long parseLong(String s, int zaklad) - na
long z libovolné soustavy.
Priklad 14.3. |
double cislo = new Double("3.1415").doubleValue(); // (1)
boolean flag = Boolean.valueOf("FALSE").booleanValue();
int cislo1 = Integer.valueOf("dead",16).intValue();
long cislo2 = Long.parseLong("bed",16);
Na řádce (1) je pro vytvoření instance třídy Double použit
její konstruktor namísto statické metody Double.valueOf(). Oba způsoby
jsou ekvivalentní. |
|
|