String s1 ="vardas"; String s2=""; String s3;Pirmąją eilutę sudaryta iš 6 simbolių, antroji yra ,,tuščia" eilutė, neturinti nei vieno simbolio, o trečiosios eilutės kol kas yra tik vardas. Ji, galbūt, bus sukurta vėliau. Jeigu eilutė sukurta, tai jos keisti jau nebegalima, t.y. eilutės yra nekintami objektai.
char c1,c2;Išvardykime visą Java paprasčiausiųjų duomenų tipų sąrašą:
byte, short, int, double, float, double, boolean, char.Žinome, kad vieno tipo duomenis galima versti kito tipo duomenimis; pavyzdžiui, char tipo duomenis galima versti skaitiniais. Parašykime, įskiepį, demonstruojantį, ką pavertę gauname.
import java.awt.*; import java.applet.*; import java.awt.event.*; public class Char extends Applet implements ActionListener{ String st=""; TextArea txt; Button mygt; public void init(){ setLayout(new BorderLayout()); txt = new TextArea(); add("Center",txt); mygt = new Button("char ir int "); mygt.addActionListener(this); add("South",mygt); } public void actionPerformed(ActionEvent e) {for (int i=1; i<256; i++) {st =st+i+"\t"+ (char) i+"\t"; if (i%5 == 0) { st=st+"\n "; txt.append(st); st="";} }}}
st =st+i+"\t"+ (char) i+"\t";ir Java kompiliatorius viską kuo puikiausiai supranta? Čia įvyksta štai kas: šis užrašas suprantamas kaip reikalavimas sudaryti naują eilutę priduriant prie turimos eilutės nurodytus simbolius, todėl Java sukuria naują eilutę, kuri pavadinama senuoju vardu st. Beje, šioje eilutėje sudėties ženklas jungia net trijų tipų duomenis, taciau Java kuo puikiausiai atlieka darbą! Atkreipkime dėmesį į dėmenis "\t" ir "\n" . Pirmasis tai komanda pereiti į kitą stulpelį (tabuliacijos komanda), antrasis - komanda pereiti į kitą eilutę. Išvardysime keletą darbo su char tipo duomenimis metodų, kurie gali jums praversti.
char forDigit(int digit, int pgr) | Grąžina simbolį, kuriuo užrašomas skaičiavimo sistemos pagrindu pgr skaitmuo digit |
boolean isDigit(char ch) | Grąžina reikšmę true, jeigu simbolis yra skaitmuo |
boolean isLetter(char ch) | Grąžina reikšmę true, jeigu simbolis yra raidė |
boolean isLetterOrDigit(char ch) | Grąžina reikšmę true, jeigu simbolis yra raidė arba skaitmuo |
boolean isSpaceChar(char ch) | Grąžina reikšmę true, jeigu simbolis tarpas |
boolean isLowerCase(char ch) | Grąžina reikšmę true, jeigu simbolis yra ,,mažoji raidė" |
boolean isUpperCase(char ch) | Grąžina reikšmę true, jeigu simbolis yra ,,didžioji raidė" |
char toLowerCase(char ch) | Grąžina tą patį simbolį, tik ,,mažąją raidę" |
boolean toUpperCase(char ch) | Grąžina tą patį simbolį, tik ,,didžiąją raidę" |
int length() | Grąžina eilutės ilgį; pav., jei s="11" tai s.length() reikšmė lygi 2 |
String toLowerCase() String toUpperCase() |
Sudaro eilutę iš tų pačių simbolių, tačiau užrašytų ,,mažosiomis" (,,didžiosiomis") raidėmis |
String trim() | Pašalina tarpus eilutės pradžioje ir gale (jei jų yra) |
int compareTo(String kitaEilute) | Grąžina reikšmę, lygią 0, jei eilutės sutampa; gražina neigiamą reikšmę, jei pirmoji eilutė mažesnė žodyninės tvarkos prasme; jei didesnė - grąžina teigiamą reikšmę |
boolean startsWith(String kitaEilute) boolean endsWith( String kitaEilute) |
Grąžina reikšmę true, jei eilutės pradžia (pabaiga) sutampa su kitaEilute |
int indexOf(char ch) int indexOf(String st) |
Nurodo numerį pirmos pozicijos, kurioje yra simbolis ch, arba kuria pirmoje eilutėje prasideda fragmentas sutampantis su eilute st |
char charAt(int nr) | Grąžina simbolį, kurios numeris eilutėje yra nr |
char [] toCharArray() | Iš eilutės simbolių sudaro char tipo duomenų masyvą |
EilMod = new StringBuffer(Eil); sukuriame StringBuffer klasės objektą Eilmod ...... atliekame EilMod pertvarkymą String EilN = new EilMod.toString(); sudarome naują String objektą iš pertvarkyto EilModPaminėsime keletą StringBuffer klasės metodų.
StringBuffer
append(boolean b) StringBuffer append(char c) StringBuffer append(int i) StringBuffer append(float f) StringBuffer append(double d) StringBuffer append(String s) |
Prie StringBuffer objekto ,,priduria" nurodyto tipo duomenis. |
StringBuffer
insert(int nr, String Eil) StringBuffer insert(int nr, char [] smbmas) StringBuffer insert(int nr, boolean b) StringBuffer insert(int nr, char c) StringBuffer insert(int nr, int i) StringBuffer insert(int nr, long l) StringBuffer insert(int nr, float fl) StringBuffer insert(int nr, double d) | Nuo StringBuffer objekto (eilutės) su numeriu nr įterpia eilutę Eil arba eilutėmis paverstus nurodyto tipo duomenis |
StringBuffer delete(int start, int end) | Pašalina simbolius nuo numerio start iki end |
StringBuffer replace(int start, int end, String Eil) | Pakeičia simbolius nuo numerio start iki end-1 nurodytos eilutės simboliais |
StringBuffer reverse() | Buferio simbolius pakeičia tais pačiais, bet perskaitytais nuo galo |
String toString() | Iš buferio sukuria String objektą, t.y. įprastinę eilutę. |
eil="pirmas antras trečias"padarys tris eilutes, kurias priskirs skirtingiems kintamiesiems.
import java.util.*; public class Skaidymas { public static main void (String [] args) {String eil="pirmas antras trečias"; StringTokenizer st = new StringTokenizer(st); String e1 = st.nextToken(); String e2 = st.nextToken(); String e3 = st.nextToken(); } }Atkreipkime dėmesį, kad programėlė prasideda eilute import java.util.*; Tai nurodymas, kad reikia importuoti java.util paketą, kur yra mums reikalinga klasė. Programėlėje panaudotas vienas StringTokenizer klasės metodas nextToken(). Jis priskiria dar nepriskirtą eilutės dalį iki sekančio skirtuko. Pagal nutylėjimą skirtukais laikomi tarpai, tabuliacijos ir perėjimo į kitą eilutę simboliai (jie grafiškai nėra vaizduojami). Tačiau galima sukurti StringTokenizer objektą, nurodant kokius simbolius reikia laikyti skirtukais. Pavyzdžiui, šitaip galime nurodyti, kad kableliai, klaustukai ir šauktukai turi būti laikomi skirtukais, taigi ,,kapojant" eilutę tiesiog praleidžiami:
StringTokenizer= new StringTokenizer(eil,",?!");Išvardykime pagrindinius klasės StringTokenizer metodus.
String nextToken() | Grąžina sekantį eilutės fragmentą iki skirtuko; jeigu nebėra ko grąžinti, generuoja ypatingos padėties požymį NoSuchElementException |
int countTokens() | Skaičiuoja kiek kartų galima be ,,ypatingos padėties įvedimo" pasinaudoti metodu nextToken() |
boolean hasMoreTokens() | Jeigu eilutė dar netuščia, t.y. dar yra bent vienas skirtukas, perduoda reikšmę true |
import java.util.*; import java.io.*; public class Sort{ Sort () { Čia aprašytas klasės (programos) konstruktorius String duom=""; BufferedReader br = new BufferedReader ( new InputStreamReader (System.in)); System.out.println ("Iveskite duomenis"); try{ duom= br.readLine();} catch (IOException e) {} isvesti(duom); } public void isvesti(String s) Eilutės rūšiavimo ir išvedimo metodas {String zodziai="", skaiciai="", eil=""; StringTokenizer st= new StringTokenizer(s); while (st.hasMoreTokens()) {eil=st.nextToken(); if (Character.isLetter(eil.charAt(0))) zodziai=zodziai+eil+"\n"; else skaiciai=skaiciai+eil+"\n"; } System.out.println (zodziai); System.out.println (skaiciai); } public static void main ( String arg[] ) { new Sort();} pagrindinis } programos metodas; darbu jo neapkrovėme; vienintelė jo pareiga - ,,pažadinti" konstruktoriųAtsisiųskite programos tekstą.
int n = Integer.valueOf(s).intValue(); long l = Long.valueOf(s).longValue(); float f = Float.valueOf(s).floatValue(); double d= Double.valueOf(s).doubleValue();Nors kai kurias iš šių komandų jau naudojome, jos tikriausiai vistiek atrodo keistokai. Tokį užrašymo stilių diktuoja ,,Java ideologija". Visų pirma, simbolių eilutė yra objektas, taigi ji gali virsti tik objektu, o ne šiaip sau skaičiumi. Pavyzdžiui, komanda Float.valueOf(s) sukuria tokį objektą (klasę.) Tai nėra paprastas float tipo skaičius, galima įsivaizduoti, kad tai tarsi ,,įpakuotas" skaičius. Kad gautume paprastą skaičių, reikia jį ,,išpakuoti". Tai ir atlieka medodas floatValue().
try { int n = Integer.parseInt(eil1); long l = Long.parseLong(eil2); } catch (NumberFormatException e) { čia gali būti tam tikra informacija, reikalinga tam atvejui, jei iš eilutės gauti skaičių nepavyktų }
import java.awt.*; import java.applet.*; import java.awt.event.*; import java.text.*; public class Formatav extends Applet implements ActionListener{ String st=""; TextArea txt; Button mygt; NumberFormat f1 = NumberFormat.getInstance (); apibrėžiami formatavimą atliekantys NumberFormat f2 = NumberFormat.getInstance (); objektai NumberFormat f3 = NumberFormat.getInstance (); public void init(){ f2.setMinimumIntegerDigits(5); nurodomi formatavimo parametrai f2.setMinimumFractionDigits(5); f3.setMaximumIntegerDigits(5); f3.setMaximumFractionDigits(5); setLayout(new BorderLayout()); txt = new TextArea(); add("Center",txt); mygt = new Button("e ir pi "); mygt.addActionListener(this); add("South",mygt); } public void actionPerformed(ActionEvent e) { String s; double eks=Math.E, pi=Math.PI; s= "e ir pi \n"; txt.append(s); s= eks+" "+ pi+"\n "; txt.append(s); s= f1.format(eks)+" "+ f1.format(pi)+"\n "; txt.append(s); s= f2.format(eks)+" "+ f2.format(pi)+"\n "; txt.append(s); s= f3.format(eks)+" "+ f3.format(pi)+"\n "; txt.append(s); }}Naudojome tris skaičių formatavimo objektus f1, f2, f3. Pirmajam jokių parametrų nenurodėme, todėl jis naudojo pagal nutylėjimą priskirimus parametrus. Antrajam objektui nurodėme, kiek mažiausiai ženklų turi turėti skaičiaus sveikoji ir trupmeninė dalys; trečiajam parametrui - kiek daugiausia ženklų reikia užrašyti. Atkreipkite dėmesį, kad norint naudoti formatavimą, reikia išsikviesti klasių paketą java.text.
import java.io.*; public class Iv_isv{ Iv_isv () { String st; FileReader frd; Skaitymo iš failo ,,įrenginio" vardas FileWriter fwr; Rašymo į failą ,,įrenginio" vardas try {File fr = new File("iv.txt"); if (! fr.exists()) jeigu failo nėra, jį sukuriame {fr.createNewFile(); } BufferedReader bfrd = new BufferedReader (frd = new FileReader ("iv.txt")); skaitymo įrenginio konstravimas System.out.println ("Pirmoji failo iv.txt eilute"); st=bfrd.readLine(); Vienos failo eilutės skaitymas System.out.println (st); frd.close(); ,,išjungiame" skaitymo įrenginį System.out.println ("Sukursime faila isv.txt ir isvesime i ji teksta"); File fl = new File("isv.txt"); if (! fl.exists()) { jeigu failo nėra, jį sukuriame fl.createNewFile(); } BufferedWriter bfrw= new BufferedWriter ( new FileWriter("isv.txt")); konstruojame rašymo įrenginį for (int i= 0; i<10; i++){ bfrw.write("Gyvenimas gražus"); bfrw.newLine(); } bfrw.close(); } catch (FileNotFoundException e) {} catch (IOException e) {} } public static void main ( String arg[] ) throws IOException { new Iv_isv();} }Atsisiųskite programos tekstą.
while((st=bfrd.readLine())!==null ) { ... veiksmai su eilute st... }Užduotys