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.
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
}
}