28. november


Erindid (exceptions)


Käsurea argumente saab käsitleda kui main-meetodi argumendina oleva järjendi elemente.

Mis juhtub, kui me eeldame, et käsureal on argument, kuid tegelikult pole?


class CommandLine{

public static void main(String args[]){

System.out.println(args[0]);

}

}


Seda saab vältida, kui programmis veaohtlikud kohad katta try-catch konstruktsiooniga.


class CommandLine{

public static void main(String args[]){

try{

System.out.println(args[0]);

} catch (Exception e){

System.out.println("polegi argumenti");

}

}

}


Try-catch konstruktsioone kasutatakse eriti palju sisendist lugemise korral.


Konsoolilt lugemine


Javas lahendatakse konsoolilt lugemine voolugejate defineerimisega.


import java.io.*;


class Prompt{

public static void main(String args[]){

String tekst = "";

System.out.println("Sisesta tekst:");

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

try{

tekst=br.readLine();

br.close();

}catch(IOException e){

System.out.println("Teil on probleem");

}

System.out.println("Sisestasid: "+tekst);

}

}


Failist lugemine on väga sarnane.


import java.io.*;


class Failist{

public static void main(String args[]){

String rida="";

try{

FileReader fr = new FileReader("mh.txt");

BufferedReader br = new BufferedReader(fr);

while((rida=br.readLine()) != null) {

System.out.println(rida);

}

fr.close();

} catch(IOException e) {

System.out.println("Probleem");

}


}

}


Faili kirjutamine


import java.io.*;

class FailSV{

public static void main(String args[]){

try{

FileWriter fw = new FileWriter("mh.txt");

BufferedWriter bw = new BufferedWriter(fw);

PrintWriter pw = new PrintWriter(bw);

pw.println("See on tekst, mis läheb faili");

pw.flush();

fw.close();

}catch(IOException e){

System.out.println("Probleem: "+e);

}

}

}


Kirjutage programm, mis väljastab esimesed x rida failist, kus x antakse ette käsurea argumendina.


Programm, mis otsib failist etteantud sõnega ridu:


import java.io.*;

public class DumbGrep {

public static void main(String args[]){

String sone =args[0];

String fnimi=args[1];

String rida;

try{

FileReader fr = new FileReader(fnimi);

BufferedReader br = new BufferedReader(fr);

while((rida=br.readLine()) != null) {

if (rida.indexOf(sone) >-1) {

System.out.println(rida);

}

}

fr.close();

} catch(IOException e) {

System.out.println("Probleem");

}

}


Kirjutada programm, mis väljastab vastavad read koos reanumbriga.


Sõnetöötlus


import java.util.StringTokenizer; // lubab kergesti sõnu lausest eraldada


class StringiUuring {

static String tekst= "Aias sadas saia"; // üks sõne

static String koopia= new String(tekst); // selle koopia

static String tapid="Täpitähed"; // testime täpitähti

public static void main(String[] args){

// sõnede võrdlemine

System.out.println("Võrdleme =-m\u00e4rgiga");

if (tekst== koopia)

System.out.println("Uskumatu, tekstid \""

+tekst+"\" \""+koopia+"\" on v\0245rdsed");

else System.out.println("Need on ju erinevad isendid");

System.out.println("Võrdleme equals-meetodiga");

if (tekst.equals(koopia))

System.out.println("Nüüd on küll võrdsed");

else System.out.println("ei ole sama tekst");

System.out.println("Teeme suured tähed");

koopia=koopia.toUpperCase();

System.out.println(koopia);

System.out.println("Võrdleme tähesuurust arvestamata");

if (tekst.equalsIgnoreCase(koopia))

System.out.println("Samad. Nüüd ei eristatud suur- ja väiketähti");

else

System.out.println("Ei ole samad tähed");

System.out.print("Kas tekst " + tekst + " on palindroom?");

if (onPalindroom(tekst)) System.out.println(" Jah");

else System.out.println(" Ei");

System.out.print("Kas tekst " + koopia + " on palindroom?");

if (onPalindroom(koopia)) System.out.println(" Jah");

else System.out.println(" Ei");

// Eraldame ühe sõna

int ind=tekst.indexOf(" ");

if (ind > 0) {

char[] symbolid= new char[ind+1];

for (int i=0; i<ind; i++){

symbolid[i]=tekst.charAt(i);

}

String sona=new String(symbolid);

System.out.println(sona);

}

// Teeme seda mugavamalt

StringTokenizer eraldaja=new StringTokenizer(tekst);

while (eraldaja.hasMoreTokens()){

System.out.println(eraldaja.nextToken());

}

}

public static boolean onPalindroom(String s){

int i;

int n=s.length();

boolean pole=false;

for (i=0;i<n/2;i++){

if (s.charAt(i) != s.charAt(n-i-1)){

System.out.println(s.charAt(i)+"!=" +s.charAt(n-i-1));

pole=true;

break;

}

}

return !pole;

}

}


Banner

/**

* Programm konsoolil teksti liigutamiseks

* Esimese sümboli tõstmisega sõne lõppu

* ja siis sõne ületrükkimisega jääb mulje, et

* et tekst pöörleb ekraanil

* @author Kaili Müürisep

*/


public class Banner{

public static void main(String[] args){

if (args.length!=1) kasutus(); // Kasutusõpetus

String tekst=args[0]; // Loeme käsurealt eksti

String kustutaja=looKustutaja(tekst.length()); // teeme sama pika sõne

// mis koosneb backspace'idest

// (tagurdussümbolitest!)

int i=0; // tsükliloendaja

while (i<100) { // teeme seda ainult sada korda

System.out.print(tekst); // trükime teksti ekraanile ilma

// reavahetuseta

System.out.flush();

pause(100); // peame pausu 100 ms

tekst=tõstaÜmber(tekst); // tõstame esimese sümboli viimaseks

System.out.print(kustutaja);// kustutame eelmise teksti ekraanilt

System.out.flush();

i++; // loendame tsüklit

}

System.out.println(); // kõige lõpuks lähme uuele reale

}

/**

* Kasutusõpetus

*/

static void kasutus(){

System.out.println("java banner \"Pöörlev tekst\"");

System.exit(0);

}

/**

* Pausi pidamine

* @param kestus millisekundites

*/

static void pause(int kestus) {

try{

Thread.sleep(kestus); // paneme lõime magama

} catch(InterruptedException exception){

System.out.println(); // kui teda just ei äratata

}

// ärkas ise üles

}

/**

* Sellise sõne genereerimine, mis koosneb kindlast arvust backspace-sümbolitest

* @param pikkus loodava sõne pikkus

* @return sõne backspace'idest koosnev sõne

*/

static String looKustutaja(int pikkus){

char[] backspace=new char[pikkus]; // loome sümbolite massiivi

for(int i=0; i<pikkus;i++) // mille kõik elemendid saavad

backspace[i]='\b'; // väärtuse '\b'

String tulemus = new String(backspace); // teeme massiivist sõne

return tulemus; // ja tagastame selle

}

/**

* Meetod sõne esimese sümboli viimaseks tõstmiseks

* @param tekst mida tõstetakse ümber

* @return tekst mis sel teel saadakse

*/

static String tõstaÜmber(String tekst){

return tekst.substring(1,tekst.length())+tekst.charAt(0);

// liida 2. sümbolist algavale alamstringile otsa esimene sümbol ja

// tagasta saadud sõne

}

}


Ülevaade sõnemeetoditest:siin Kodune töö Koostada programm sonede asendamiseks tekstifailis. Antud failinimi, asendatav sone, asendav sone. Tulemus: asendustega tekst kirjutatakse faili asendatud.txt; ekraanile väljastatakse tehtud asenduste arv. Algandmed saadakse käsurea argumentidena. Ebasobiva argumentide arvu korral väljastatakse kasutusjuhend. Näide Olgu failis loomad.txt tekst Ega hunt hunti murra. Hunt kodu lähedalt ei murra. Paberihunt on kantseleis. Pärast käsku java Asenda loomad.txt hunt kriimsilm ilmub ekraanile Failis loomad.txt asendati sõne 2hunt" 3 korda sõnega "kriimsilm". Ja asendatud.txt kirjutatakse tekst Ega kriimsilm kriimsilmi murra. Hunt kodu lähedalt ei murra. paberikriimsilm on kantseleis.