In aceasta lucrare de laborator vor fi
acoperite urmatoarele probleme:
- Instalarea kitului de dezvoltare Java (jdk) (include si configurarea
variabilelor de mediu PATH si CLASSPATH si a tipurilor de fisiere .java) – link extern
- Etapele dezvoltarii unui program
Java (conceperea, editarea – scrierea comentariilor si a codului,
compilare, lansarea programului in interpretor, depanarea) – link extern
- Studiu de caz: programul Salut.java
- Utilizarea script-urilor (fisiere batch)
pentru simplificarea dezvoltarii programelor Java
- Depanarea programelor Java (creare de erori, urmarirea efectului, interpretarea mesajelor)
- Modificarea programelor Java (modificarea functionalitatii,
adaugarea unor noi functionalitati)
- Studiu de caz: programul Salut.java – link extern
- Program de calcul al unui polinom
O cale de a incepe conceperea programelor simple este de a crea un asa numit pseudocod, adica o descriere intr-un limbaj apropiat de cel
natural a ceea ce trebuie sa faca programul. De exemplu:
|
clasa care
ilustreaza elementele esentiale ale unui program Java, contine:
metoda principala (punctul de intrare in
program):
afiseaza pe ecran textul “Buna
ziua” |
Urmatorul pas poate fi transformarea acestor texte in comentarii.
1 2 3 4 5 6 7 8 9 10 11 |
/** Clasa
care ilustreaza elementele esentiale ale unui program Java. * Trebuie sa fie publica pentru ca are metoda
principala. */ /** Metoda principala (punct de intrare in
program). * Este prima metoda executata de
JVM (Java Virtual Machine). *
Primeste ca parametri argumentele din lina de comanda. * Nu
returneaza nici o valoare. Trebuie sa fie ‘public
static’ */ // Corpul metodei afiseaza textul
"Buna ziua" pe ecran |
In continuare, se pot utiliza pasi succesivi in care se adauga codul Java, pornind
de la nivelul cel mai inalt (urmand o strategie
top-down – de la nivel inalt la nivel
jos – prin detaliere):
- declaratia clasei:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** Clasa care ilustreaza elementele
esentiale ale unui program Java. *
Trebuie sa fie publica pentru ca are metoda principala. */ public class Salut { /** Metoda principala (punct
de intrare in program). * Este prima metoda executata de JVM (Java
Virtual Machine). * Primeste ca parametri argumentele din lina
de comanda. * Nu returneaza nici o
valoare. Trebuie
sa fie ‘public static’ */ // Corpul
metodei afiseaza textul "Buna
ziua" pe ecran } |
- declaratiile atributelor si metodelor (in cazul nostru metoda main()):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** Clasa care ilustreaza elementele
esentiale ale unui program Java. *
Trebuie sa fie publica pentru ca are metoda principala. */ public class Salut { /** Metoda principala (punct de intrare in program). * Este prima metoda executata de JVM (Java
Virtual Machine). * Primeste ca parametri argumentele din lina
de comanda. * Nu returneaza nici o
valoare. Trebuie
sa fie ‘public static’ */ public static void main(String[] args) { // Corpul metodei afiseaza textul "Buna ziua" pe ecran } } |
- si corpurile metodelor (in cazul nostru metoda main()):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/** Clasa care ilustreaza elementele
esentiale ale unui program Java. *
Trebuie sa fie publica pentru ca are metoda principala. *
@author Eduard C. Popovici */ public class
Salut { /** Metoda
principala (punct de intrare in program). * Este prima metoda executata de JVM (Java
Virtual Machine). * Primeste ca parametri argumentele din lina
de comanda. * Nu returneaza nici o
valoare. Trebuie
sa fie ‘public static’ */ public static void main(String[] args) { System.out.println("Buna ziua");
// Afisarea unui text pe ecran } } |
Daca inlaturam comentariile, codul ramas
este urmatorul:
1 2 3 4 5 |
public class Salut { public static void main(String[] args) { System.out.println("Buna
ziua"); } } |
In laborator: Se va deschide editorul Notepad, si se va edita
codul de mai sus (fara comentarii) intr-un fisier salvat cu numele Salut.java in directorul cu numele D:\Software2006\NumarulGrupeiSiSeria.
(exemplu: 421E sau 454D sau 454 E).
Daca se
presupune utilizarea compilatorului Java din linia de comanda (consola de
intrare), atunci trebuie executata urmatoarea comanda, in directorul in care se
afla fisierul Salut.java:
directorcurent> javac Salut.java
In urma acestei comenzi, compilatorul Java va crea genera codul de octeti corespunzator intr-un fisier cu numele Salut.class, in
directorul in care se afla si fisierul Salut.java.
In laborator: Se va
compila codul sursa in directorul cu numele D:\Software2006\NumarulGrupeiSiSeria.
Pentru executia
programului, acesta trebuie lansat
in interpretor, folosind comanda:
directorcurent> java Salut
Rezultatul va fi aparitia
mesajului Buna
ziua! pe ecranul
monitorului.
In laborator: Se va
lansa in executie codul de octeti in directorul cu numele D:\Software2006\NumarulGrupeiSiSeria.
In final, pe ecran poate fi urmatoarea secventa de informatii:
directorcurent> javac Salut.java
directorcurent> java Salut
Buna ziua!
directorcurent>
O simplificare a lansarii in executie a programului este crearea unui fisier script cu extensia .bat (in acelasi directorul
cu sursa java), numit de exemplu Run_Salut.bat, cu urmatorul continut:
javac Salut.java
java Salut
pause
si lansarea lui in executie. Pe ecran se va obtine:
directorcurent> Run_Salut.bat
directorcurent> javac Salut.java
directorcurent> java Salut
Buna ziua!
directorcurent> pause
Press any key to continue...
In laborator: Se va crea
fisierul script Run_Salut.bat cu
continutul de mai sus. Se va executa
scriptul prin dublu click, in Windows Explorer, pe numele fisierului.
In laborator: Se vor
produce urmatoarele erori si modificari in codul sursa (varianta de 5
linii, fara comentarii), se vor urmari efectele, si se vor face interpretari
ale acestora:
Dupa fiecare modificare codul va fi recompilat (iar in
caz de succes executat din nou), iar inaintea
unei noi modificari va fi mai intai restabilit programul initial.
Raspunsurile la urmatoarele intrebari vor usura interpretarea rezultatelor :
- Ce se afiseaza pe ecran?
- Ce fel de problema apare (eroare de
compilare, exceptie in timpul executiei, niciuna)?
- Care este cauza probabila?
- Cat de sugestiv este mesajul care apare?
- Ce concluzii se pot trage?
I. Se
va elimina prima acolada (din linia 1)
Exemplu de rezolvare: La compilare, pe ecran se afiseaza:
|
Salut.java:1:
'{' expected public class
Salut ^ 1 error |
Problema: eroare de compilare. Cauza: compilatorul sesizeaza inexistenta
acoladei deschise dupa numele clasei, acolada care marcheaza inceputul corpului
clasei. Mesajul e destul de sugestiv incat sa ne permita
corectarea rapida a erorii. Concluzii:
…
II. Se va
elimina acolada din linia 2
Exemplu de rezolvare: La compilare, pe ecran se afiseaza:
|
Salut.java:2:
';' expected public static void main(String[] args) ^ Salut.java:5:
'class' or 'interface' expected } ^ Salut.java:6:
'class' or 'interface' expected ^ 3 errors |
Problema: eroare de compilare. Cauza: compilatorul sesizeaza
inexistenta acoladei deschise dupa numele metodei main, acolada care marcheaza
inceputul corpului metodei. Prima parte a mesajului este utila pentru
a corecta eroarea, dar restul mesajului poate produce confuzie in
primul moment. Dupa corectarea erorii din linia doi, “erorile” 2 si 3
“dispar”. Concluzii: Apare un
fenomen de “propagare a erorilor”,
lipsa acoladei respective putand avea mai multe interpretari.
III. Se
va elimina simbolul punct si virgula (;)
din linia 3
IV. Se vor
elimina parantezele drepte, [], din linia 2
V. Se va
elimina cuvantul cheie void (din linia 2)
VI. Se va
elimina cuvantul cheie static (din linia 2)
Exemplu de rezolvare: Dupa compilare, in momentul executiei, pe
ecran se afiseaza:
|
Exception in
thread "main" java.lang.NoSuchMethodError: main |
Problema: situatie exceptionala (java.lang.NoSuchMethodError) in timpul executiei. Cauza: Masina Virtuala Java (JVM), cea care sta in spatele interpretorului java sesizeaza inexistenta unei metode Java cu semnatura completa: public static void main(String[] args) Mesajul produce confuzie in primul moment, deoarece da impresia ca metoda nu exista, si nu sugereaza cauza situatiei exceptionale. Concluzii: Este strict necesara declararea metodei main() ca fiind de tip static. Este recomandabila retinerea simptomelor acestei situatii exceptionale!
VII. Se vor inlocui ghilimelele cu apostroafe in linia 3
VIII. Se va inlocui numele clasei System cu system in linia 3
IX. Se va
inlocui numele clasei Salut cu salut in linia 1
X. Se va
inlocui args din linia 2 cu cuvantul argumente
Sa se scrie un program Java numit Polinom0, care:
- creeaza
un polinom cu grad prestabilit si coeficienti de valori prestabilite (1, 2, 3, 2, 1),
- afiseaza
polinomul,
- calculeaza
valoarea polinomului pentru o
anumita valoare prestabilita a necunoscutei (2), si
- afiseaza
aceasta valoare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
public
class Polinom0 { public
static void main(String[]
args) {
System.out.println("\nProgramul Polinom0 a fost
lansat...\n"); //
Declararea si initializarea variabilei intregi numita gradPolinom, //
care contine gradul polinomului, N=4 // Crearea
tabloului coeficientilor (de dimensiune N+1), //
numit coeficienti, folosind valorile prestabilite : 1,
2, 3, 4, 5 // Afisarea polinomului P(X) // - mai intai termenul liber Co // - apoi termenii Ci*X^i, unde i=1,N // Declararea si initializarea
variabilei intregi numita necunoscuta, // care contine valoarea necunoscutei,
X=2 // Afisarea valorii necunoscutei (X) // Declararea si initializarea
variabilei intregi numita polinom, // care contine valoarea polinomului,
P(X) // Calculul polinomului P(X) = suma(Ci
* X^i), unde i=0,N // - actualizarea valorii polinomului //
- actualizarea valorii X^i, unde i=1,N // Afisarea valorii polinomului P(X) } } |
Observatii:
- pentru a crea un tablou se
foloseste sintaxa:
// Crearea unui tablou de 7 valori
intregi, varianta scurta
int[] tab = { 1, 2, 3, 4, 3, 2, 1 };
- pentru a afisa valorile din
tabloul tab poate fi folosita urmatoarea
secventa de cod:
System.out.print("elementele tabloului
sunt: " + tab[0]);
for (int i=1; i<tab.length; i++) {
System.out.print(", " + tab[i]);
}
System.out.println("\n");
- formatul pentru afisarea
polinomului (pentru gradul 4 si coeficientii 1, 2, 3, 4,
5) va fi:
P(X) = 1 + 2*X^1
+ 3*X^2 + 4*X^3 + 5*X^4
In laborator: Se
va completa codul cu instructiuni Java, se va salva intr-un fisier cu numele Polinom0.java, se va compila si executa programul. Link
catre Polinom0.class.
In aceasta forma, la fiecare executie programul va genera aceleasi iesiri.
Pornind de la programul Polinom0 sa se scrie un program numit Polinom1, care:
- creeaza
un polinom cu grad si coeficienti avand valorile obtinute de la utilizator,
- afiseaza
polinomul,
- calculeaza
valoarea polinomului pentru o valoare
a necunoscutei specificata de utilizator,
si
- afiseaza
aceasta valoare.
Programul Polinom1 reprezinta o generalizare a
programului anterior (versiune mai flexibila), deoarece gradul polinomului,
valorile coeficientilor si necunoscutei sunt obtinute de la utilizator.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import
javax.swing.JOptionPane; public
class Polinom1 { public
static void main(String[]
args) {
System.out.println("Programul Polinom1 a fost
lansat..."); // Declararea variabilei intregi gradPolinom pt.
gradul polinomului, N // Obtinerea gradului polinomului de la
utilizator, conversie String-int // Declararea si crearea tabloului coeficientilor,
numit coeficienti // Obtinerea de la utilizator a coeficientilor Ci, unde i=0,N // Afisarea
polinomului P(X) // - mai
intai termenul liber Co // - apoi
termenii Ci*X^i, unde i=1,N // Declararea variabilei intregi necunoscuta // Obtinerea valorii necunoscutei de la
utilizator, conversie String-int // Afisarea
valorii necunoscutei (X) //
Declararea si initializarea variabilei intregi numita polinom, // care
contine valoarea polinomului, P(X) // Calculul
polinomului P(X) = suma(Ci * X^i), unde i=0,N // - actualizarea valorii polinomului // - actualizarea valorii X^i, unde
i=1,N // Afisarea valorii polinomului P(X) System.exit(0); //
Inchiderea interfetei grafice } } |
Observatii:
- pentru a obtine de la utilizator o
valoare de tip sir de caractere (String) se foloseste sintaxa:
String nume = JOptionPane.showInputDialog("Introduceti
numele"));
- pentru a o valoare de la String la int se foloseste sintaxa:
int numarStudenti = Integer.parseInt("25");
- evident, combinand cele sintaxe se poate scrie:
int numarStudenti = Integer.parseInt(JOptionPane.showInputDialog(
"Introduceti numarul studentilor din grupa"));
- pentru a declara si crea (aloca
memorie pentru) un tablou de intregi se foloseste sintaxa:
int[] noteStudenti = new int[numarStudenti];
- pentru a popula (atribui valori
initiale) un tablou de intregi se foloseste sintaxa:
for (int i=0; i<noteStudenti.length;
i++) {
noteStudenti[i] = Integer.parseInt(JOptionPane.showInputDialog(
"Introduceti nota studentului cu numarul " + i));
}
In laborator: Se
va completa codul cu instructiuni Java, se va salva intr-un fisier cu numele Polinom1.java, se va compila si executa programul. Link
catre Polinom1.class.
In aceasta forma, la fiecare executie programul poate genera alte iesiri, in functie de
valorile de intrare.
Pornind de la programul Polinom1 sa se scrie codul unei clase Java numita Polinom2, a carei structura interna contine:
- o metoda (declarata public static) numita obtineGrad(), care obtine de la utilizator valoarea gradului
polinomului, si o returneaza ca intreg de tip int,
- o metoda (declarata public static) numita stabilesteCoeficienti(), care primeste un parametru intreg de tip int, numit gradPolinom, reprezentand gradului polinomului, creaza un nou tablou al coeficientilor
(cu gradPolinom
+1 elemente), obtine de
la utilizator valori pentru coeficientii polinomului si populeaza cu ei tabloul
nou creat, apoi returneaza taboul de tip int[] creat,
- o metoda (declarata public static) numita obtineNecunoscuta(), care obtine de la utilizator valoarea
necunoscutei, si o returneaza ca intreg de tip int,
- o metoda (declarata public static) numita afisarePolinom(), care primeste un parametru intreg de tip int, numit gradPolinom, reprezentand gradului polinomului, si un parametru de tip int[], numit coeficienti, reprezentand coeficientii polinomului, si afiseaza polinomul
corespunzator valorilor primite,
- o metoda (declarata public static) numita valoarePolinom(), care primeste un parametru intreg de tip int, numit gradPolinom, reprezentand gradului polinomului, un parametru de tip int[], numit coeficienti, reprezentand coeficientii polinomului, si un parametru intreg de tip int, numit necunoscuta, reprezentand necunoscuta, si calculeaza valoarea polinomului
corespunzatoare valorilor primite si o returneaza ca intreg de tip int,
- o metoda principala, de test,
care:
- deleaga catre metoda obtineGrad()
obtinerea valorii gradului polinomului,
- deleaga catre metoda stabilesteCoeficienti()
stabilirea valorilor coeficientilor polinomului,
- deleaga catre metoda afisarePolinom()
afisarea polinomului,
- deleaga catre metoda obtineNecunoscuta()
obtinerea valorii necunoscutei,
- afiseaza valoarea necunoscutei,
- deleaga catre metoda valoarePolinom()
calculul valorii polinomului,
- afiseaza valoarea polinomului.
In laborator: Se
va completa codul sursa cu instructiuni Java, se va salva intr-un fisier cu
numele Polinom2.java, se va compila si executa programul. Link
catre Polinom2.class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import
javax.swing.JOptionPane; public
class Polinom2 { // Metoda care obtine de la utilizator
gradul polinomului public static int obtineGrad() { // Obtinerea
de la utilizator a gradului polinomului // Returnarea valorii gradului polinomului } // Metoda care obtine de la utilizator
coeficientii polinomului public static int[] stabilesteCoeficienti(int
gradPolinom) { // Declararea si crearea tabloului coeficientilor, numit coeficienti // Obtinerea de la utilizator a coeficientilor Ci, unde
i=0,N // Returnarea tabloului coeficientilor } //
Metoda care afiseaza polinomul P(X) public static
void afisarePolinom(int
gradPolinom, int[] coeficienti) { // Afisarea polinomului P(X) // - mai intai termenul liber Co // - apoi termenii Ci*X^i, unde i=1,N } // Metoda care obtine de la utilizator
valoarea necunoscutei public static int obtineNecunoscuta() { //
Obtinerea de la utilizator a valorii necunoscutei // Returnarea valorii necunoscutei } //
Metoda care calculeaza valoarea polinomului pt o valoare a necunoscutei public static int valoarePolinom(int gradPolinom,
int[] coeficienti, int
necunoscuta) { //
Declararea si initializarea variabilei intregi numita polinom, // care
contine valoarea polinomului, P(X) // Calculul polinomului P(X) = suma(Ci * X^i), unde i=0,N // - actualizarea valorii
polinomului // - actualizarea valorii X^i, unde
i=1,N //
Returnarea valorii polinomului } // Metoda principala. Utilizata pentru
testarea celorlalte metode. public static void main(String[] args) { // Apelul metodei care obtine de la utilizator gradul
polinomului // Apelul metodei care obtine de la utilizator coeficientii polinomului // Apelul metodei care afiseaza
polinomul // Apelul metodei care obtine o valoare a necunoscutei // Afisarea
valorii necunoscutei // Apelul metodei care calculeaza polinomul pentru necunoscuta
data // Afisarea
valorii polinomului System.exit(0); // Inchiderea interfetei grafice } } |
De reflectat:
1. Ce alte metode ar putea
fi utile pentru lucrul cu
polinomul?
2. Cum ar trebui modificat programul pentru a putea efectua scenariul in mod repetat?
In laborator:
1. Se va adauga o metoda (declarata public
static) numita toString(), care primeste un parametru intreg de tip int, numit gradPolinom, reprezentand gradului polinomului, si un parametru de tip int[], numit coeficienti, reprezentand coeficientii polinomului, si care returneaza polinomul sub forma de sir de caractere (obiect de tip String) in formatul (pentru grad 4 si coeficienti 1,2,3,4,5):
P(X) = 1 + 2*X^1
+ 3*X^2 + 4*X^3 + 5*X^4
2. Se va modifica programul
Polinom2 astfel incat sa utilizeze metoda toString() pentru a afisa forma generala a polinomului
(in loc sa utilizeze metoda afisarePolinom() in acest scop).
3. Se va crea o clasa noua, UtilizarePolinom2 care sa utilizeze
metodele clasei Polinom2 pentru calculul unui polinom (delegare catre metodele altei clase).
4. Se va modifica programul Polinom2 pentru a
putea efectua scenariul in mod
repetat.
Bruce Eckel, Thinking in Java, 3 rd ed. Rev. 4.0, http://www.faqs.org/docs/think_java/TIJ3_c.htm
(PDF: http://www.planetpdf.com/codecuts/pdfs/eckel/TIJ3.zip (beta), Zipped HTML and
source code: http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip)
Kevin Taylor, Java Progr. Tutorial, http://java.about.com/od/beginningjava/a/beginjavatutor.htm
Sun Microsystems, The Java™ Tutorials, http://java.sun.com/docs/books/tutorial/java/TOC.html
(download : http://java.sun.com/docs/books/tutorial/information/download.html)
Sun Microsystems, J2SE 5.0 API Specification, http://java.sun.com/j2se/1.5.0/docs/api/index.html
Sun Microsystems, JDK™ 5.0 Documentation, http://java.sun.com/j2se/1.5.0/docs/index.html
Tema de casa pentru data viitoare:
I. Sinteza
(interpretarea) raporturilor de eroare obtinute prin modificarea programului Salut.java (scrisa pe hartie, nu tiparita la imprimanta).
II. Codurile sursa ale
programelor Polinom0, Polinom1 si Polinom2 completate.
De reflectat, pentru examen, asupra programelor din paragrafele urmatoare:
1. Cum trebuie modificat programul pentru a lucra cu valori
specificate de utilizator in
timpul executiei?
2. Cum poate fi realizata delegarea functionala?
3. Cum poate fi realizata delegarea catre o
alta clasa (metodele altei clase)?
4. Cum trebuie modificat programul pentru a putea efectua scenariul in mod repetat?
Programul NumarAparitii0.java creaza un tablou care contine o multime de valori prestabilite (cea minima este 1, cea
maxima prestabilita), afiseaza
elementele tabloului, calculeaza si
stocheaza intr-un tablou numarul de aparitii ale fiecarei valori in multime
(histograma), si afiseaza elementele
acestui tablou.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public
class NumarAparitii0 { public
static void main(String[]
args) { System.out.println("\n
Program NumarAparitii (histograma) \n"); // Valoarea maxima (M)
(valoarea minima este 1) int maxim = 5; // Numarul de valori (N) int numarValori = 20; // Crearea tabloului (de dimensiune N)
valorilor int[] valori = { 1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3, 4, 5, 4, 3, 2, 1,
2, 3, 4 }; // Afisarea tabloului initial System.out.print("\nValorile
testate: "); for (int i=0; i<numarValori; i++) {
System.out.print(valori[i]
+ " "); }
System.out.println("\n"); // Crearea tabloului (de dimensiune M) cu numarul de aparitii int[] numarAparitii = new int[maxim];
// Determinarea numarul de aparitii ale
fiecarei valori de la 1 la M for (int i=0; i<numarValori; i++) { numarAparitii[valori[i]-1]++; } // Afisarea tabloului cu numarul de
aparitii for (int i=0; i<maxim;
i++) {
System.out.println("Valoarea
" + (i+1) + " apare de " + numarAparitii[i]
+ " ori"); }
System.out.println(); } } |
Programul CautareCuvantCheie0.java creaza un tablou care contine siruri de caractere
prestabilite si un tablou care
contine cuvinte cheie prestabilite,
afiseaza elementele tabloului, pentru fiecare sir de caractere si fiecare
cuvant cheie determina daca si unde se afla cuvantul in sir, si informeaza
utilizatorul cu privire la cuvintele gasite si pozitia lor in siruri.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import java.io.*; import java.util.*; public class CautareCuvantCheie0
{ public
static void main(String[] args)
throws IOException {
String[] texteAnalizate = {
"The string tokenizer class allows an application" ,
"to break a string into tokens." ,
"The tokenization method is much simpler than" ,
"the one used by the StreamTokenizer class. " ,
"The StringTokenizer methods do not distinguish" ,
"among identifiers, numbers, and quoted strings," ,
"nor do they recognize and skip comments. " ,
"The set of delimiters (the characters that separate
tokens)" , "may be specified either at creation
time or on a per-token basis." };
String[] cuvinteCheie = {
"string" , "token" }; //
Pentru toate textele analizate for
(int i=0; i<texteAnalizate.length; i++) { // Pentru
toate cuvintele cheie cautate for
(int j=0; j<cuvinteCheie.length; j++) { //
Daca un anumit cuvant cheie este gasit intr-un anumit text //
Varianta cu String.indexOf() if
( texteAnalizate[i].indexOf(cuvinteCheie[j]) > -1 ) {
// Informeaza utilizatorul (indicand si pozitia)
System.out.println("Cuvantul cheie ''" + cuvinteCheie[j] +
"'' a fost gasit in textul ''" + texteAnalizate[i] +
"'' pe pozitia " + (texteAnalizate[i].indexOf(cuvinteCheie[j]) + 1) +
"\n"); } //
Daca un anumit cuvant cheie este gasit intr-un anumit text //
Varianta cu String.split() if
( texteAnalizate[i].split(cuvinteCheie[j]).length
!= 1 ) {
// Informeaza utilizatorul
System.out.println("Cuvantul cheie ''" + cuvinteCheie[j] +
"'' a fost gasit in textul ''" + texteAnalizate[i] + "''\n"); } } } } } |
Programul StatisticiText0.java creaza un tablou care contine siruri de caractere
prestabilite si un tablou care
contine cuvinte cheie prestabilite,
afiseaza elementele tabloului, pentru fiecare sir de caractere si fiecare
cuvant cheie determina daca si unde se afla cuvantul in sir, si informeaza
utilizatorul cu privire la cuvintele gasite si pozitia lor in siruri.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import java.io.*; import java.util.*; public class StatisticiText0
{ public
static void main(String[]
args) throws IOException { String
textAnalizat =
"The string tokenizer class allows an application to break a
string" +
" into tokens. The tokenization method is much simpler than the
one" +
" used by the StreamTokenizer class. The StringTokenizer methods
do" + " not distinguish among identifiers,
numbers, and quoted strings," +
" nor do they recognize and skip comments. The set of
delimiters" +
" (the characters that separate tokens) may be specified either
at" +
" creation time or on a per-token basis."; String[] cuvinte = textAnalizat.split(" "); // Numarul de cuvinte System.out.println(" Textul:\n\n" + textAnalizat + "\n\n
contine " + cuvinte.length +
" cuvinte:"); // Cuvintele for (int i=0; i<cuvinte.length; i++) {
System.out.print("\t" + cuvinte[i]); }
System.out.println(); //
Propozitiile
System.out.println("\n
Textul contine urmatoarele propozitii:\n"); String
propozitie = null; int p
= 0; String
text = textAnalizat; for (int f = 0; (f = text.indexOf(".")) > -1; p++) { propozitie = text.substring(0,
f);
System.out.println(propozitie
+ ".\n"); text = text.substring(f+1,
text.length()); if (text.indexOf("
") == 0) { text = text.substring(1,
text.length()); } } // Numarul de propozitii System.out.println("\n In total
sunt " + p + " propozitii:\n"); } } |