predavanje06

Download Report

Transcript predavanje06

RP3/predavanje06
 Generici
 Kolekcije
 String, StringBuilder
13/04/2015
---------- Računarski praktikum 3 ---------Maja Starčević
1
Generički tipovi i metode
Višestruka iskoristivost koda može se postići nasljeđivanjem
baznog tipa ili pomoću generika.
Generici povećavaju tipsku sigurnost i smanjuju potrebu za
kastanjem i pakiranjem.
Generički tip sadrži generički parametar koji korisnik
zamjenjuje s konkretnim tipom.
Primjer: otvoreni tip List<T>
13/04/2015
--- > zatvoreni tip List<string>
Računarski praktikum 3
2
Generički tipovi
Generički parametri mogu se nalaziti u deklaraciji klase,
strukture, metoda, sučelja i delegata.
U deklaraciji se može nalaziti i više takvih parametara:
class Dictionary<TKeyValue, TValueType> { … }
Dozvoljeno je preopterećivanje generičkih tipova i metoda,
odnosno definiranje više tipova ili metoda s istim imenom,
ali različitim brojem generičkih parametara.
13/04/2015
Računarski praktikum 3
3
Generičke metode
Generičke metode sadrže generičke parametre unutar
potpisa.
static void Zamijeni<T> (ref T a, ref T b)
{
T temp=a;
a=b;
b=temp;
}
---------------------------------------------------------int x=1, y=3;
Zamijeni(ref x, ref y); // Kompilator implicitno dodjeljuje tip int
Zamijeni<int>(ref x, ref y) ; // Može i eksplicitno
13/04/2015
Računarski praktikum 3
4
Generički tipovi
Na generičke parametre se mogu primijeniti ograničenja
ako se zahtijeva veća specifikacija tipa.
13/04/2015
where T : ImeKlase
T mora naslijediti zadanu klasu.
where T : ImeSučelja
T mora implementirati zadano sučelje.
where T : class
T mora biti klasa ili neki drugi referentni tip.
where T : struct
T mora biti struktura ili neki drugi vrijednosni tip.
where T : new( )
T mora imati javni konstruktor bez parametara.
where T : U
Generički parametar T je izveden iz drugog
generičkog parametra U.
Računarski praktikum 3
5
Generički tipovi
Ukoliko se u listi nalazi više generičkih parametara s
ograničenjem, navodimo where za svaki posebno:
class Klasa< T , U >
where T: struct
where U: class, new( )
{
……
}
Primjer generičkog delegata:
delegate T MyDelegate<T>( ) where T : new ( )
13/04/2015
Računarski praktikum 3
6
Generički tipovi
class Klasa { int a; }
class C<T> where T : struct {
class D<T> where T : class {
T t; }
T t; }
class Program
{
static void Main(string[] args)
{
C<int> c1;
// C<Klasa> c2;
// D<int> d1;
D<Klasa> d2;
}
}
13/04/2015
Računarski praktikum 3
7
Generički tipovi
Zadatak: koje su od sljedećih generičkih metoda dobro
definirane?
public static bool Usporedi1<T>(T a, T b) { return a == b; }
public static bool Usporedi2<T>(T a, T b) where T : struct { return a == b; }
public static bool Usporedi3<T>(T a, T b) where T : class { return a == b; }
public static bool Usporedi4<T>(T a, T b) { return a.Equals(b); }
public static bool Usporedi5<T>(T a, T b) { return ReferenceEquals(a, b); }
13/04/2015
Računarski praktikum 3
8
Generički tipovi
Odgovor: Metode Usporedi1 i Usporedi 2 ne rade na svim
vrijednosnim tipovima (nije osigurano da je operator ==
definiran za sve moguće strukture).
public static bool Usporedi1<T>(T a, T b) { return a == b; }
// greška
public static bool Usporedi2<T>(T a, T b) where T : struct { return a == b; }
// greška
public static bool Usporedi3<T>(T a, T b) where T : class { return a == b; }
public static bool Usporedi4<T>(T a, T b) { return a.Equals(b); }
public static bool Usporedi5<T>(T a, T b) { return ReferenceEquals(a, b); }
13/04/2015
Računarski praktikum 3
9
Generički tipovi
Zadatak: popravite kod
interface ICitljivo { void Citaj( );}
class C<T> where T: ICitljivo
{
T t;
void f( ) { t.Citaj( ); t.Pisi( ); }
}
class S { void Citaj( ) { } }
class Program
{
static void Main(string[] args)
{
C<S> s;
}
}
13/04/2015
Računarski praktikum 3
10
Generički tipovi
interface ICitljivo { void Citaj( );}
class C<T> where T: Icitljivo
{
T t;
void f( ) { t.Citaj( ); t.Pisi( );}
}
// T ne implementira sučelje koje pruža metodu Pisi( )
class S : ICitljivo { public void Citaj( ) { } }
class Program
{
static void Main(string[] args)
{
C<S> s;
}
}
13/04/2015
Računarski praktikum 3
11
Generički tipovi
class Program
{
static T Zbroj<T>(T a, T b)
{
return a + b;
//error
}
static void Main(string[] args)
{
int a=1, b=2;
int c = Zbroj(a, b);
}
}
Napomena: u prethodnoj generičkoj metodi nije osigurano da će operator zbrajanja biti
definiran za svaki mogući tip T. Također, nemoguće je pozvati se direktno na sučelje s
obzirom da su operatori statičke funkcije, a takve se ne mogu nalaziti u sučeljima.
13/04/2015
Računarski praktikum 3
12
Generički tipovi
Moguće rješenje:
interface ICalculator<T>
{
T Suma(T a, T b);
}
struct IntCalculator : ICalculator<int>
{
public int Suma(int a, int b) { return a + b; }
}
class Program
{
public static T Zbroj<T, C>(T a, T b) where C : ICalculator<T>, new()
{
C c=new C();
return c.Suma(a, b);
}
static void Main(string[] args)
{
Console.WriteLine( Zbroj<int, IntCalculator>(1, 2) );
}
}
13/04/2015
Računarski praktikum 3
13
Generički tipovi
Napomena: od verzije C# 4.0 moguće je koristiti i ključnu riječ dynamic:
class Program
{
static T Zbroj<T>(T x, T y)
{
dynamic dx = x, dy = y;
return dx + dy;
}
static void Main(string[] args)
{
int a=1, b=2;
int c = Zbroj(a, b);
}
}
13/04/2015
Računarski praktikum 3
14
Generički tipovi
U generičku metodu ubacit ćemo parametar tipa delegata kako bismo mogli pozivati konstruktor koji prima int:
public class B
{
private int b;
public B(){ b=0; }
public B(int i){ b=i; }
public override string ToString()
{
return b.ToString();
}
}
public class Program
{
public static T f<T>(int i, Func<int, T> metoda) where T : new()
{
return metoda(i);
}
static void Main(string[] args)
{
Func<int, B> del=( i=> new B(i));
B obj1=del(2);
Console.WriteLine(obj1.ToString());
B obj2 = f<B>(2, del);
Console.WriteLine(obj2.ToString());
}
}
13/04/2015
Računarski praktikum 3
15
Kolekcijske klase
.NET Framework sadrži kolekcijske klase Array, List,
Dictionary, Queue, Stack, SortedList, SortedDictionary …
(u prostorima System.Collections,
System.Collections.Generic, System.Collections.Specialized
…)
Sadrži i dva skupa standardnih sučelja za enumeriranje i
uspoređivanje objekata u kolekciji - za tipski neosigurane
kolekcije i noviju verziju, za generičke, tipski osigurane
kolekcije.
13/04/2015
Računarski praktikum 3
16
Kolekcijska sučelja
13/04/2015
ICollection<T>
Osnovno sučelje za generičke
kolekcije. Implementiraju ga sve
kolekcije.
IEnumerator<T>
IEnumerable<T>
Sučelja za enumeriranje kroz
kolekciju (pomoću foreach naredbe).
IComparer<T>
IComparable<T>
Podržava uspoređivanje objekata u
kolekciji u svrhu sortiranja.
IList<T>
Implementiraju ga indeksirane
kolekcije.
IDictionary<K,V>
Sučelje za kolekcije bazirane na
principu ključ/vrijednost
Računarski praktikum 3
17
Array
Array je najjednostavnija kolekcija. To je kolekcija za koju
C# ima ugrađenu podršku (ugrađeni indekseri za pristupanje
n-tom članu).
Primjer: int[ ] matrica=new int[4] u IL-kodu kreira instancu za
System.Int32[ ] (izveden iz apstraktne klase System.Array).
13/04/2015
Računarski praktikum 3
18
Array
Metode i svojstva u System.Array:
AsReadOnly( ), BinarySearch( ), Clear( ), Clone( ), ConstrainedCopy( ),
ConvertAll( ), Copy( ), CopyTo( ), CreateInstance( ), Exists( ), Find( ),
FindAll( ), FindIndex( ), FindLast( ), FindLastIndex( ), ForEach( ),
GetEnumerator( ), GetLength( ), GetLongLength( ), GetLowerBound( ),
GetUpperBound( ), GetValue( ), IndexOf( ), Initialize( ), IsFixedSize( ),
IsReadOnly( ), IsSynchronized( ), LastIndexOf( ), Length( ), LongLength( ),
Rank, Resize( ), Reverse( ), SetValue( ), Sort( ), SyncRoot( ), TrueForAll( )
13/04/2015
Računarski praktikum 3
19
Array
class Program
{
public static void PrintArray(object[ ] array)
{
foreach (object obj in array)
Console.WriteLine(obj);
}
static void Main(string[ ] args)
{
string[ ] recenica={ "Ovo", "je" ,"primjer"};
Array.Reverse(recenica);
PrintArray(recenica);
Array.Sort(recenica);
PrintArray(recenica);
}
Output:
primjer
je
Ovo
je
Ovo
primjer
}
13/04/2015
Računarski praktikum 3
20
List
Klasa List predstavlja matricu čija se veličina može po
potrebi dinamički povećavati.
Metode i svojstva u klasi List:
Capacity, Count, Item( ), Add ( ), AddRange ( ), AsReadOnly ( ),
BinarySearch( ), Clear( ), Contains( ), ConvertAll( ), CopyTo( ), Exists( ),
Find( ), FindAll( ), FindIndex( ), FindLast( ), FindLastIndex( ), ForEach( ),
GetEnumerator( ), GetRange( ), IndexOf ( ), Insert( ), InsertRange( ),
LastIndexOf( ), Remove( ), RemoveAll( ), RemoveAt( ), RemoveRange( ),
Reverse( ), Sort( ), ToArray( ), TrimExcess( ), TrimToSize( )
13/04/2015
Računarski praktikum 3
21
List
public decimal Cijena
{
get { return cijena; }
set { cijena = value; }
}
using System;
using System.Collections.Generic;
using System.Text;
}
public class Proizvod
{
string naziv;
decimal cijena;
public Proizvod (string naziv, decimal cijena)
{
this.naziv = naziv;
this.cijena = cijena;
}
public string Naziv
{
get { return naziv; }
set { naziv = value; }
}
13/04/2015
class Program
{
static void Main(string[] args)
{
List<Proizvod> lista = new List<Proizvod>();
lista.Add(new Proizvod("Coca Cola“, 5.50M));
lista.Add(new Proizvod("Sprite", 5.25M));
Console.WriteLine(lista.Capacity);
// 4
lista.Capacity = 2;
Console.WriteLine(lista.Capacity);
// 2
Console.WriteLine(lista[1].Cijena);
//5,25
}
}
Računarski praktikum 3
22
System.Collections
System.Collections prostor sadrži negeneričke kolekcije poput
ArrayList. Vrijednosni tipovi zahtjevaju pakiranje.
using System.Collections;
using System.Collections.Generic;
………….
ArrayList alista = new ArrayList();
alista.Add("knjiga");
alista.Add(1);
alista[1] = null;
List<int> lista=new List<int>();
lista.Add(1);
lista.Add(2);
lista[1]=null; //greška
13/04/2015
Računarski praktikum 3
23
Queue
Queue (red) je kolekcija koja radi na principu first-in, first-out.
Svojstva i metode kolekcije Queue:
13/04/2015
Count
Svojstvo koje vraća broj elemenata
reda.
Clear( )
Briše sve elemente u redu.
Contains( )
Ispituje je li element dio reda.
CopyTo( )
Kopira elemente reda u
jednodimenzionalnu matricu.
Računarski praktikum 3
24
Queue
13/04/2015
Dequeue( )
Vraća objekt s početka reda i
istovremeno ga uklanja iz reda.
Enqueue( )
Dodaje objekt na kraj reda.
GetEnumerator( )
Vraća enumerator za red.
Peek( )
Vraća objekt s početka reda, ali ga
pritom ne uklanja iz reda.
ToArray( )
Kopira elemente reda u novu
matricu.
TrimExcess( )
Reducira trenutni kapacitet reda tako
da odgovara broju elemenata.
Računarski praktikum 3
25
Queue
class Program
{
static void Main(string[ ] args)
{
Queue<Proizvod> red = new Queue<Proizvod>( );
Proizvod p1 = new Proizvod(“Coca Cola", 5.45M);
Console.WriteLine(red.Count);
Console.WriteLine(red.Contains(p1));
red.Enqueue(p1);
Console.WriteLine(red.Contains(p1));
Proizvod p2 = red.Peek();
Console.WriteLine(red.Count);
Console.WriteLine(p1==p2);
red.Dequeue( );
Console.WriteLine(red.Contains(p1));
Output:
0
False
True
1
True
False
}
}
13/04/2015
Računarski praktikum 3
26
Stack
Stack (stog) je last-in, first-out kolekcija objekata.
Metode i svojstva u kolekciji Stack:
13/04/2015
Count
Svojstvo koje vraća broj objekata u
stogu.
Clear( )
Uklanja objekte sa stoga.
Contains( )
Ispituje pripadnost stogu.
CopyTo( )
Kopira elemente stoga u
jednodimenzionalno polje.
Računarski praktikum 3
27
Stack
13/04/2015
GetEnumerator( )
Vraća Enumerator za stog.
Peek( )
Vraća objekt s vrha stoga bez uklanjanja.
Pop( )
Dohvaća objekt s vrha stoga i pritom ga
uklanja.
Push( )
Stavlja objekt na vrh stoga.
ToArray( )
Kopira elemente stoga u novu matricu.
TrimExcess( )
Reducira kapacitet stoga do broja
elemenata (ako je trenutni broj elemenata
manji od 90% njegovog kapaciteta).
Računarski praktikum 3
28
Stack
using System;
using System.Collections.Generic;
using System.Text;
class Program
{
static void Main(string[ ] args)
{
Stack<int> stog = new Stack<int>( );
for (int i = 0; i < 5; i++)
stog.Push( i );
stog.Pop( );
int count = stog.Count;
for( int i=0; i<count; i++ )
Console.WriteLine(stog.Pop( ));
Console.WriteLine( stog.Count);
Output:
3
2
1
0
0
}
}
13/04/2015
Računarski praktikum 3
29
Dictionary
Dictionary je kolekcija koja svakoj vrijednosti pridružuje ključ.
Implementira IDictionary<K,V> sučelje (K-tip ključa, V-tip
vrijednosti).
.NET Framework može pridružiti ključ bilo kojeg tipa (string,
integer, object, ...) vrijednosti bilo kojeg tipa. U pravilu je
ključ jednostavnijeg tipa.
Primjer 1: u rječniku stranih riječi svakoj riječi (ključ)
pridružuje se definicija (vrijednost).
Primjer 2: auto-oznake i gradovi.
13/04/2015
Računarski praktikum 3
30
Dictionary
using System;
using System.Collections.Generic;
using System.Text;
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> gradovi = new Dictionary<string, string>( );
gradovi.Add("ZG", "Zagreb");
gradovi.Add("ST", "Split");
gradovi.Add("KA", "Karlovac");
gradovi.Add("RI", "Rijeka");
gradovi.Add("OS", "Osijek");
Console.WriteLine("Grad s autooznakom ST je {0}", gradovi["ST"]);
}
}
C# implementacija
svojstva Item( )
13/04/2015
Računarski praktikum 3
31
Dictionary
13/04/2015
Count
Svojstvo koje vraća broj elemenata u
kolekciji.
Item( )
Indekser za kolekciju.
Keys
Vraća kolekciju koja sadrži sve
ključeve.
Values
Vraća kolekciju koja sadrži sve
vrijednosti.
Add( )
Dodaje kolekciji novi element sa
zadanim ključem i vrijednosti.
Clear( )
Uklanja sve objekte iz kolekcije.
Računarski praktikum 3
32
Dictionary
13/04/2015
ContainsKey( )
Provjerava nalazi li se zadani ključ u
kolekciji.
ContainsValue( )
Provjerava nalazi li se zadana
vrijednost u kolekciji.
GetEnumerator( )
Vraća enumerator za Dictionary.
GetObjectData( )
Implementira ISerializable i vraća
podatke potrebne za serijalizaciju.
Remove( )
Briše element koji pripada zadanom
ključu.
TryGetValue( )
Vraća vrijednost pridruženu
zadanom ključu. Ako ključ ne postoji,
vraća default vrijednost za pripadni
tip.
Računarski praktikum 3
33
Dictionary
Dictionary<string, string>.KeyCollection autoOznake = gradovi.Keys;
foreach (string c in autoOznake)
Console.WriteLine(c);
Dictionary<string, string>.ValueCollection imenaGradova = gradovi.Values;
foreach (string c in imenaGradova)
Console.WriteLine(c);
-------------------------------------------------------------------------------------------------------------ZG
ST
KA
RI
OS
Zagreb
Split
Karlovac
Rijeka
Osijek
13/04/2015
Računarski praktikum 3
34
Sortirane kolekcije
SortedDictionary<TKey,TValue> - kolekcija na principu
ključ/vrijednost sortirana po ključu.
SortedDictionary<int, string> sd = new SortedDictionary<int, string>();
sd.Add(2, "Zagreb");
sd.Add(1, "Split");
sd.Add(4, "Osijek");
sd.Add(3, "Rijeka");
foreach (KeyValuePair<int, string> kvp in sd)
Console.WriteLine("{0} - {1}", kvp.Key, kvp.Value);
1 – Split
2 – Zagreb
3 – Rijeka
4 - Osijek
Da smo koristli Dictionary<int, string>, ispis bi odgovarao redoslijedu ubacivanja parova.
13/04/2015
Računarski praktikum 3
35
IComparable
Ako objekti u listi implementiraju sučelje IComparable<T>,
na listu se može primijeniti Sort( ) metoda.
Da bi objekt T implementirao sučelje IComparable<T> mora
pružiti implementaciju CompareTo( ) metode.
U sljedećem primjeru koristi se default CompareTo( )
metoda za tip string koja vraća vrijednosti -1 ( < ) , 1 ( > ) ili 0
(==).
13/04/2015
Računarski praktikum 3
36
IComparable
class Student : IComparable<Student>
{
public string ime;
public string prezime;
class Program
{
static void Main(string[] args)
{
List<Student> lista= new List<Student>();
Student s1=new Student("Marko", "Maric");
lista.Add(s1);
Student s2 = new Student("Ivan", "Ivic");
lista.Add(s2);
Student s3 = new Student("Ana", "Anic");
lista.Add(s3);
public Student (string ime, string prezime)
{
this.ime = ime;
this.prezime=prezime;
}
public int CompareTo(Student s)
{
lista.Sort();
foreach (Student s in lista)
Console.WriteLine(s.ime+” “+s.prezime);
return this.prezime.CompareTo(s.prezime);
}
}
}
}
13/04/2015
Računarski praktikum 3
37
Enumerator
Enumerator je klasa koja implementira sučelje IEnumerator
ili generičko sučelje IEnumerator<T>.
Mora implementirati metodu MoveNext (koja služi za
iteriranje kroz niz) i svojstvo Current s get pristupnikom (za
pristupanje trenutnom elementu niza).
Enumerator je dakle read-only, forward-only kursor kroz niz
vrijednosti.
13/04/2015
Računarski praktikum 3
38
IEnumerable
Klase koje implementiraju sučelje IEnumerable ili
IEnumerable<T> pružaju mogućnost korištenja foreach
naredbe za iteriranje kroz niz vrijednosti pripadnog objekta.
Klasa koja implementira neko od navedenih sučelja mora
implementirati metodu GetEnumerator koja stvara
enumerator.
Napomena: sučelja IEnumerable i IEnumerator su definirana
u prostoru System.Collections dok se IEnumerable<T> i
IEnumerator<T> nalaze u System.Collections.Generic.
13/04/2015
Računarski praktikum 3
39
IEnumerable
class Brojevi : IEnumerable
{
class Program
{
static void Main(string[] args)
{
private List<int> lista;
public IEnumerator GetEnumerator()
{
List<int> l = new List<int>();
l.AddRange(new int[] { 1, 2, 3, 4 });
foreach (int i in lista)
yield return i;
Brojevi brojevi = new Brojevi();
brojevi.Lista=l;
}
public List<int> Lista
{
set { lista = value; }
get { return lista; }
}
foreach (var i in brojevi)
Console.Write(i);
}
}
}
13/04/2015
Računarski praktikum 3
40
IEnumerable
static void Main(string[] args)
{
class Program
{
static IEnumerable<int> ProstiBrojevi(int n)
{
for(int i=2; i<=n; ++i)
{
bool prost=true;
foreach (int i in ProstiBrojevi(100))
Console.Write("{0} ", i);
// isti ispis se postiže i s :
for (int j=2; j<=Math.Sqrt(i); ++j)
if ((i%j)==0) prost=false;
if (prost) yield return i;
IEnumerator<int> enumerator =
ProstiBrojevi(100).GetEnumerator();
while (enumerator.MoveNext())
Console.Write("{0} ", enumerator.Current);
}
}
}
}
13/04/2015
Računarski praktikum 3
41
IEnumerable
Sada želimo da klasa umjesto sučelja IEnumerable
implementira generičko sučelje IEnumerable<T>.
Sučelje IEnumerable<T> proširuje sučelje IEnumerable te
stoga takva klasa mora implementirati metode:
IEnumerator GetEnumerator(); iz IEnumerator sučelja i
IEnumerator<T> GetEnumerator() koja je dodana u
IEnumerator<T> sučelje.
Moramo implementirati svaku posebno jer imaju različite povratne
tipove. Zbog istog potpisa jednu moramo implementirati eksplicitno.
13/04/2015
Računarski praktikum 3
42
IEnumerable
class C : IEnumerable<int>
{
int[] niz = new int[10];
public IEnumerator<int> GetEnumerator()
{
foreach (int i in niz)
yield return i;
}
// implicitna implementacija
IEnumerator IEnumerable.GetEnumerator() // eksplicitna implementacija
{
return GetEnumerator();
}
}
13/04/2015
Računarski praktikum 3
43
Zadatak
Napišite klasu koja implementira IEnumerable<int> sučelje.
Klasa sadrži listu brojeva. Treba implementirati i metodu Add( int ) za
dodavanje broja u listu, metodu Remove( int ) kojom se izbacuje posljednji
element liste koji ima zadanu vrijednost i Clear() kojom se brišu svi
elementi liste. Klasa mora sadržavati i svojstvo Pomak.
Ukoliko iteriramo kroz objekt klase foreach naredbom, moramo dobiti popis
svih brojeva iz liste, ali ne uobičajenim redoslijedom nego sa zadanim
pomakom, npr. za Pomak=3 i niz 1, 2, 3, 4, 5, 6, 7 dobivamo ispis
1, 4, 7, 3, 6, 2, 5.
Ukoliko ne možemo na taj način proći kroz cijeli niz, mora se izbaciti
iznimka s odgovarajućom porukom.
U klasu stavite i funkciju Test( int ) koja testira foreach na nizu prvih n
brojeva.
13/04/2015
Računarski praktikum 3
44
String
Puna deklaracija klase System.String (alias string u C#-u)
glasi:
public sealed class String :
IComparable, IComparable<String>, ICloneable,
IConvertible, IEnumerable, IEnumerable<char>,
IEquatable<String>
13/04/2015
Računarski praktikum 3
45
String
class Program
{
static void Usporedi(string a, string b)
{
Console.WriteLine("{0}, {1}, {2}", a == b, Object.ReferenceEquals(a, b), a.Equals(b));
}
static void Main(string[] args)
{
string s1 = "Rp3";
string s2 = "Rp3";
Usporedi(s1, s2);
string s3= "Racunarski";
string s4 = s3;
s3 += "praktikum 3";
// string je nepromjenjiv tip, konkatenacijom se zapravo stvara novi
Usporedi(s3, s4);
// string, referenca s3 se prebacuje na novi string
}
}
13/04/2015
Računarski praktikum 3
46
String
class Program
{
static void Usporedi(string a, string b)
{
Console.WriteLine("{0}, {1}, {2}", a == b, Object.ReferenceEquals(a, b), a.Equals(b));
}
static void Main(string[] args)
{
string s1 = "Rp3";
string s2 = "Rp3";
Usporedi(s1, s2);
string s3= "Racunarski";
string s4 = s3;
s3 += "praktikum 3";
// string je nepromjenjiv tip, konkatenacijom se zapravo stvara novi
Usporedi(s3, s4);
// string, referenca s3 se prebacuje na novi string
}
}
True, True, True
False, False, False
13/04/2015
Računarski praktikum 3
47
String
13/04/2015
Chars
Indekser stringa
Compare( )
Metoda koja uspoređuje dva stringa.
CompareTo( )
Uspoređuje string sa zadanim stringom.
Concat( )
Stvara novi string iz jednog ili više stringova.
Copy( )
Metoda koja kreira novi string kopirajući
drugog.
CopyTo( )
Kopira zadani broj znakova u matricu Unicode
znakova.
Računarski praktikum 3
48
String
13/04/2015
Empty
Public static polje koje predstavlja prazan
string.
EndsWith( )
Provjerava podudara li se kraj stringa sa
zadanim stringom.
Equals( )
Provjerava imaju li dva stringa istu vrijednost.
Format( )
Formatira string prema zadanoj specifikaciji.
Join( )
Vraća string koji se dobiva umetanjem
zadanog stringa u zadani string array.
Length( )
Broj znakova u instanci.
Računarski praktikum 3
49
String
13/04/2015
Split( )
Vraća podstringove odvojene
zadanim znakovima u stringu.
StartsWith( )
Provjerava počinje li string zadanim
znakovima.
Substring( )
Vraća podstring koji počinje na
zadanoj poziciji stringa.
ToUpper( )
Vraća kopiju stringa u uppercase.
Trim( )
Uklanja zadani skup znakova s
početka i kraja stringa.
TrimEnd( )
Kao i Trim( ), ali samo na kraju
stringa.
Računarski praktikum 3
50
String
class Program
{
static void Main(string[ ] args)
{
string s1=" uljez ";
string s2 = "ulj";
string s3 = "Ovo je primjer";
string[] s = new string[3];
s=s3.Split();
Console.WriteLine(string.Join(s1,s));
Console.WriteLine(s1.ToUpper( ));
Console.WriteLine(string.Concat(s1,s1));
Console.WriteLine(s1.StartsWith(s2));
Console.WriteLine(s1.Trim( ));
Console.WriteLine(s1.Substring(3));
Output:
Ovo uljez je uljez primjer
ULJEZ
uljez uljez
False
uljez
jez
}
}
13/04/2015
Računarski praktikum 3
51
StringBuilder
System.Text.StringBuilder se koristi za kreiranje i
modificiranje stringova. Ovaj tip se može mijenjati za razliku
od tipa string.
13/04/2015
Chars
Indekser
Length
Prima i vraća duljinu StringBuilder-a.
Insert( )
Ubacuje string na zadano mjesto.
Remove( )
Uklanja zadane znakove.
Append( )
Dodaje string na kraj trenutnog
StringBuilder-a.
Računarski praktikum 3
52
StringBuilder
class Program
{
static void Main(string[] args)
{
string s1 = "Prva,druga i treca verzija.";
const char razmak = ‘ ';
const char zarez = ‘, ';
char[] znakovi = new char[ ] { razmak, zarez };
StringBuilder s2 = new StringBuilder();
StringBuilder s3 = new StringBuilder();
int brojStringa = 1;
foreach (string podString in s1.Split(znakovi))
{
s2.Append(podString);
s3.AppendFormat("{0}:{1}\n", brojStringa++, podString);
}
Console.WriteLine("{0}\n{1}", s2, s3);
Output:
Prvadrugaitrecaverzija.
1:Prva
2:druga
3:i
4:treca
5:verzija.
}
}
13/04/2015
Računarski praktikum 3
53