PART 13

advertisement
PART 13
13. Tarih & Zaman
Java, java.util paketi içinde mevcut olan Date sınıfını sağlar, bu sınıf güncel tarih ve
zamanı kapsüllemektedir.
Date sınıfı 2 adet constructor destekler. İlk constructor, güncel tarih ve zaman ile
nesneye ilk değerini atar.
Date( )
Aşağıdaki constructor, 1 Ocak 1970 gece yarısından bu yana geçen milisaniye
sayısına eşit bir bağımsız değişken kabul etmektedir.
Date(long millisec)
Bir kere mevcut Date nesnesine sahipseniz, tarihlerle oynamak için aşağıda
desteklenen metotlardan herhangi birini çağırabilirsiniz.
Methods with Description
boolean after(Date date)
Date nesnesi çağrılırken belirtilen tarihten sonra bir tarih içeriyorsa, true değeri döndürür, aksi
halde false değeri döndür.
boolean before(Date date)
Date nesnesi çağrılırken belirtilen tarihten önce bir tarih içeriyorsa, true değeri döndürür, aksi
halde false değeri döndür.
int compareTo(Date date)
Çağrılan nesnenin değeri ile bu tarihi karşılaştırır. Değerler eşit ise , 0 döndürür. Çağrılan nesne
tarihten daha önce iste negatif değer döndürür. Çağrılan nesne tarihten daha sonra ise pozitif
değer döndürür.
boolean equals(Object date)
Date nesnesi çağrılırken belirtilen tarihe eşit bir tarih ve zaman içeriyorsa, true değeri döndürür,
aksi halde false değeri döndür.
String toString( )
Çağrılan Date nesnesini string türüne çevirir ve değeri döndürür.
13.1 Güncel Tarih ve Zamanı Alma
Javada, güncel tarih ve zamanı alma çok kolaydır. Aşağıdaki gibi güncel tarih ve
zamanı yazdırmak için basit bir Date nesnesini toString() metodu ile kullanabilirsiniz.
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date using toString()
System.out.println(date.toString());
}
}
Bu aşağıdaki sonucu üretecektir:
Mon May 04 09:51:52 CDT 2012
13.2 Tarih Karşılaştırma
2 farklı tarihi karşılaştırmak için iki adet yöntem vardır.
1. before(), after() ve equals() metolarını kullanabilirsiniz.
2. compareTo() metodunu kullanabilirsiniz.
Örnek:
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date d1 = new Date();
SimpleDateFormat ft1 = new SimpleDateFormat ("yyyy.MM.dd hh:mm:ss");
ft1.format(d1);
Date d2 = new Date( );
SimpleDateFormat ft2 = new SimpleDateFormat ("2012.11.dd hh:mm:ss");
ft2.format(d2);
System.out.println("D1: " + ft1.format(d1) );
System.out.println("D2: " + ft2.format(d2) );
System.out.println(d1.after(d2));
System.out.println(d1.before(d2));
System.out.println(d1.compareTo(d2));
System.out.println(d1.equals(d2));
} }
Bu aşağıdaki sonucu üretecektir:
D1: 2013.03.10 10:38:12
D2: 2012.11.10 10:38:12
false
true
-1
false
13.3 Tarih Biçimlendirme
(SimpleDateFormat)
SimpleDateFormat, yerele duyarlı bir şekilde tarihleri biçimlendirmek ve öğelerine
ayırmak
için
kullanılan
somut
bir
sınıftır.
SimpleDateFormat,
tarih-zaman
biçimlendirme için herhangi kullanıcı tanımlı bir kalıp seçerek başlatmanıza izin verir.
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("yyyy.MM.dd hh:mm:ss");
System.out.println("Current Date: " + ft.format(dNow));
}
}
Bu aşağıdaki sonucu üretecektir:
Current Date: 2013.03.10 10:13:46
SimpleDateFormat biçimlendirme kodları
Zaman biçimini belirtmek için ,time pattern string kullanın. Bu kalıpta, bütün ASCII
karakterleri, kalıp karakterleri olarak ayrılmıştır. Aşağıdaki tabloda gösterilmektedir:
Karakter
Tanımlama
Örnek
G
Çağ göstergesi
AD
y
Dört basamaklı yıllar
2001
M
Yılın ayı
July or 07
d
Ayın günü
10
h
Saat A.M./P.M. türünde (1~12)
12
H
Saat (0~23)
22
m
Dakika
30
s
Saniye
55
S
Milisaniye
234
E
Haftanın günü
Tuesday
D
Yılın günü
360
F
Ay içinde haftanın günü
2 (second Wed. in July)
w
Yılın haftası
40
W
Ayın haftası
1
a
A.M./P.M. işaretcisi
PM
k
Günün saati (1~24)
24
K
Saat A.M./P.M. türünde (0~11)
10
z
Saat dilimi
Eastern Standard Time
'
Metin için kaçış
Delimiter
"
Tek tırnak
`
13.4 Tarihleri Stringlere Ayrıştırma
SimpleDateFormat sınıfı bazı ek metotlara sahiptir, özellikle parse(), bu metot
SimpleDateFormat nesnesi içinde depolanmış biçime göre string’i ayrıştırır. Örnek:
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
A sample run of the above program would produce following result:
$ java –jar DateDemo.jar
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java –jar DateDemo.jar 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007
13.5 Kısa Süreli Uyku
Bir milisaniyeden bilgisayarınızın yaşam süresine kadar herhangi bir süre sleep
yapabilirsiniz. Bu örnekte, program 3 saniye sleep yapmaktadır.
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
Date start = new Date();
System.out.println(start.toString() + "\n");
Thread.sleep(3000);
Date stop = new Date();
System.out.println(stop.toString() + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Bu aşağıdaki sonucu üretecektir:
Sun May 03 18:04:41 GMT 2012
Sun May 03 18:04:44 GMT 2012
13.6 Geçen Zamanı Ölçme
Bazen zaman içinde bir noktayı milisaniye cinsinde ölçmeniz gerekebilir. O halde,
yukarıdaki örneği bir kere daha yazalım:
import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
Date startdate = new Date();
System.out.println(startdate.toString() + "\n");
Thread.sleep(3000);
long end = System.currentTimeMillis();
Date stopdate = new Date();
System.out.println(stopdate.toString() + "\n");
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Bu aşağıdaki sonucu üretecektir:
Sun May 03 18:16:51 GMT 2012
Sun May 03 18:16:54 GMT 2012
Difference is : 3010
PART 14
14. Düzenli İfadeler
Java, düzenli ifadeler ile kalıp eşleşmesi için java.util.regex paketini sağlar. Java
düzenli ifadeleri, Perl programlama dili ile çok benzerdir ve öğrenmesi kolaydır.
Bir düzenli ifade, desen içinde tutulan özelleştirilmiş bir syntax kullanılarak, diğer
stringleri ve string kümelerini eşleştirmeye veya bulmanıza yarayan bir özel karakter
dizisidir. Metin ve veriyi aramak, düzenlemek veya değiştirmek için kullanılırlar.
Java.util.regex paketi başlıca ,aşağıdaki üç sınıftan oluşur.

Pattern Sınıfı: Bir pattern nesnesi, düzenli ifadenin derlenmiş gösterimidir.
Pattern sınıfı, public constructor sağlamaz. Kalıp oluşturmak için, öncelikle
onun public static derleme metotlarını çağırmanız gerekmektir, bu bir Pattern
nesnesi döndürecektir. Bu metotlar , düzenli ifadeyi ilk bağımsız değişken
olarak kabul eder.

Matcher Sınıfı: Bir eşleştirici nesnesi, deseni yorumlayan ve bir input string’ine
karşı eşleştirme işlemlerini gerçekleştiren bir motordur. Pattern sınıfı gibi,
Matcher sınıfı da public constructor tanımlamaz. Bir Pattern nesnesi üzerinden
matcher metodunu çağırarak bir Matcher nesnesi elde edebilirsiniz.

PatternSyntaxException: Bir PatternSyntaxException nesnesi, düzenli ifade
desenindeki syntax hatasını gösteren denetimsiz bir exceptiondır.
Örnek
Aşağıdaki örnek verilen stringten e-mail stringlerinin nasıl bulunacağını anlatmaktadır:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches
{
public static void main( String args[] ){
// String to be scanned to find the pattern.
String line = " Benim mailim maltepe@maltepe.edu.tr Bu ise arkadaşımın maili
aa@aa.com şeklindedir.";
String pattern = " \\b[\\w.%-]+@[-.\\w]+\\.[A-Za-z]{2,4}\\b";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(line);
while (m.find( )) {
System.out.println("Found:" + m.group() );
}
}
}
Bu aşağıdaki sonucu üretecekir:
Found: maltepe@maltepe.edu.tr
Found: aa@aa.com
Group index değerini kullanmak için
// Now create matcher object.
Matcher m = r.matcher(line);
m.find();
System.out.println("Found 0:" + m.group(0) );
Yukarıda verilmiş kod parçası, sadece ilk bulunmuş string’i gösterecektir.
14.1 Düzenli İfadelerin yazım biçimi
Buradaki tablo, Java dilinde mevcut bütün düzenli ifade metakarakter syntax’ını
listelemektedir.
Subexpression Matches
^
Satır başlangıcını eşleştirir.
$
Satır sonunu eşleştirir.
.
Yeni satır hariç herhangi bir tekil karakterini eşleştirir. M seçeneğini kullanmakta yeni
satırı eşleştirmeyi sağlar.
[...]
Köşeli parantez içinde herhangi bir tekil karakterini eşleştirir.
[^...]
Köşeli parantez olmayan herhangi bir tekil karakterini eşleştirir.
\A
Bütün string’in başlangıcı
\z
Bütün string’in sonu
\Z
İzin verilen son satır sonlandırıcı hariç bütün string’in sonu
re*
Önceki ifadenin 0 veya daha fazla olayını eşleştirilir.
re+
Önceki şeyin 1 veya daha fazlasını eşleştirir.
re?
Önceki ifadenin 0 veya 1 olayını eşleştirir.
re{ n}
Önceki ifadenin n sayıda olayını eşleştirir.
re{ n,}
Önceki ifadenin n veya daha fazla olayını eşleştirir.
re{ n, m}
.
Önceki ifadenin en az n ve en fazla m olayını eşleştirir.
a| b
A veya B den birini eşleştirir.
(re)
Düzenli ifadeleri gruplar ve eşlenmiş metni hatırlar.
(?: re)
Düzenli ifadeyi, eşlenmiş metni hatırlamadan gruplar.
(?> re)
Bağımsız deseni geileme yapmadan eşleştirir.
\w
Kelime karakterlerini eşleştirir.
\W
Kelime olmayan karakterleri eşleştirir.
\s
Alfabe dışı karakteri eşleştirir. [\t\n\r\f] eşdeğer.
\S
Matches nonwhitespace.
Alfabe dışı olmayan karakteri eşleştirir..
\d
Basamak eşleştirir. [0-9] eşdeğer
\D
Sayı olmayanı eşleştirir.
\A
String başlangıcını eşleştirir.
\Z
String sonunu eşleştirir. Eğer yeni satır varsa, yeni satırdan hemen öncekini eşleştirir.
\z
String sonunu eşleştirir.
\G
Son eşleşmenin bittiği noktayı eşler
\n
Grup numarası “n” olan back to reference yakalar
\b
Köşeli parantezin dışındaki kelime sınırlarını eşleştirir. Köşeli parantezin içindeki geri
(backspace (0x08)) karakterlerini eşleştirir.
\B
Kelime olmayan sınırları eşler.
\n, \t, etc.
Yeni satırları,carriage returnleri,tabları eşler
\Q
\E ye kadar olan kaçış karakterleri
\E
\Q ile başlamış alıntıyı bitirir.
Download