Dione
Z. KotalaP. Toman: Java
Predchozi (Obsah) Dalsi

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 String

Vytvo°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 StringBuffer

T°φ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∞zec

Velmi Φ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 typu

Pro 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φ.


  • (1) Znaky \u0000 a╛ \u0020 jsou pova╛ovßny za bφlΘ.
  • (2) Metoda valueOf(), jejφm╛ parametrem je reference na objekt, pou╛φvß pro p°evod metodu toString() (viz 11.5.).
  • (3) T°φdy Byte a Short jsou k dispozici od JDK 1.1.

Predchozi
Converted by Selathco v0.9 on 25.09.1999 19:46
Dalsi