public static void main(String[] args) { String[] words=new String[]{"Ali","Veli","Kemal"}; StringBuffer buffer = new StringBuffer(); for (String word : words) { if (buffer.length() != 0) { buffer.append("|"); } buffer.append("(\\b"); buffer.append(word); buffer.append("\\b)"); } Pattern pattern = Pattern.compile(buffer.toString(), Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); String text="Bu gece çok güzel olacak " + "değil mi Ali kemal ?"; Matcher matcher = pattern.matcher(text); System.out.println(matcher.find()); }
Ali , Veli ve Kemal kelimeleri kontrol edilecek kelimelerdir. Bu kelimele kullanılarak basit bir regular expression oluşturulmuştur. Daha sonra Pattern class'ı kullanılarak verilen kelimelerin olup olmadığı kontrol kontrol edilmekte ve sonuç ekrana basılmaktadır.
public String toHex(String string){ char[] chars = string.toCharArray(); StringBuffer hex = new StringBuffer(); for(int i = 0; i < chars.length; i++){ hex.append(Integer.toHexString((int)chars[i])); } return hex.toString(); }
import java.security.NoSuchAlgorithmException; public class ByteToHex { public static String hex(byte[] byteArray) throws NoSuchAlgorithmException { StringBuffer hexString = new StringBuffer(); for (int i = 0; i < byteArray.length; i++) { if ((0xff & byteArray[i]) < 0x10) { hexString.append("0" + Integer.toHexString((0xFF & byteArray[i]))); } else { hexString.append(Integer.toHexString(0xFF & byteArray[i])); } } return hexString.toString(); } public static void main(String[] args) throws NoSuchAlgorithmException { String hex=ByteToHex.hex("fibiler".getBytes()); System.out.println("hex:"+hex); } }Bir byte değeri için 0xFF ile & (and) operatörü uygulanır ise , negatif sayılar için negatiflik özelliği kaldırılmaktadır. Bu fonksiyon aynı byte'a hep aynı hex değerini vermesi içindir. Verilen byte'ların içeriği değiştirildiğine dikkat etmeniz gerekir.
public class StringHelper { public static String toTitleCase(String text) { if(text==null){ return text; } String[] array = text.split(" "); StringBuffer sb = new StringBuffer(); for (int i = 0; i < array.length; i++) { sb.append(Character.toUpperCase(array[i].charAt(0))) .append(array[i].substring(1)).append(" "); } return sb.toString().trim(); } public static void main(String[] args) { System.out.println(toTitleCase("en hakiki murşit ilimdir fendir")); } }
import org.apache.commons.lang.RandomStringUtils; public class RandomStringUtilsTest { public static void main(String[] args) { System.out.println(RandomStringUtils.random(10)); System.out.println(RandomStringUtils.randomAscii(10)); System.out.println(RandomStringUtils.randomAlphabetic(10)); System.out.println(RandomStringUtils.randomNumeric(10)); System.out.println(RandomStringUtils.randomAlphanumeric(10)); } }Uygulama çalıştırıldığında aşağıkdaki gibi çıktı oluşabilir : ????????? m8m-Kdjsly TILdVbdWpo 7718949159 i4KDz23KeC Görüldüğü gibi hep 10 karakter üretilmiştir. İlk örnekte gözükmeyen karakterlerin de üretilmesi nedeniyle ? şeklinde görülmüştür. Diğerlerinde ASCII , numeric , alfabetik ve alfanumeric şeklinde 10 karakterli şifreler üretilmiştir. Apache Lang projesi için aşağıdaki gibi Maven bilgisini ekleyebilirsiniz:
<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency>
import java.security.SecureRandom; public class SecureRandomStringTest { static final String CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; public static void main(String[] args) { SecureRandom rnd = new SecureRandom(); StringBuilder sb = new StringBuilder(5); for (int i = 0; i < 5; i++) { sb.append(CHARS.charAt(rnd.nextInt(CHARS.length()))); } System.out.println(sb.toString()); } }CHARS değişkeninde belirtilen karakterler kullanılmıştır. SecureRandom ile rastgele index değeri üretilmiş ve CHARS değişkeninin o index'teki değeri kullanılıyor. Uygulama çalıştığında aşağıdaki gibi şifreler üretilebilir: mV1uL Xpy1u SXo9I
String s="Ali";şeklinde bir String tanımlandığında "Ali" ifadesi String havuzunda saklanmaktadır. Bu nedenle aşağıdaki gibi bir karşılaştırma true sonucu verir. Çünkü havuzda aynı String'e karşılık gelmektedir:
public class StringPoolTest { public static void main(String[] args) { String a="Ali"; String b="Ali"; if(a==b) { System.out.println("true"); }else { System.out.println("false"); } } }Uygulamayı çalıştırdığınızda çıktıya true yazacaktır. Ancak ikinci String "" ile değil de new String("Ali") ile yaratsaydık bu String havuzda olmayacaktır ve false cevabı alınacaktı. Aşağıdaki örnek false sonucu verecektir:
public class StringPoolInternTest { public static void main(String[] args) { String a="Ali"; String b=new String("Ali"); if(a==b) { System.out.println("true"); }else { System.out.println("false"); } } }Eğer bir String nesnesinin String'ini havuza eklenmesi isteniyorsa intern() yöntemi kullanılır. Bu yöntem geriye havuza eklenmiş String verir:
public class StringPoolInternTest { public static void main(String[] args) { String a="Ali"; String b=new String("Ali"); if(a==b) { System.out.println("true"); }else { System.out.println("false"); } b=b.intern(); if(a==b) { System.out.println("true"); }else { System.out.println("false"); } } }Uygulama çalıştığında ilk olarak false yazar. Ancak intern() yöntemi çağrıldıktan nsonra kontrol edildiğinde true sonucu basar.
<dependency> <groupId>io.github.java-diff-utils</groupId> <artifactId>java-diff-utils</artifactId> <version>4.0</version> </dependency>Aşağıdaki örnekte iki string karşılaştırılmaktadır :
import com.github.difflib.algorithm.DiffException; import com.github.difflib.text.DiffRow; import com.github.difflib.text.DiffRowGenerator; public class Test { public static void main(String[] args) throws DiffException { DiffRowGenerator generator = DiffRowGenerator.create() .showInlineDiffs(true) .mergeOriginalRevised(true) .inlineDiffByWord(true) .oldTag(f -> "~") //introduce markdown style for strikethrough .)newTag(f -> "**") //introduce markdown style for bold .build(); String text1="a Example is sucessfull\r\n" + "this is true\r\n" + "but if else"; String text2="an Example is successfull\r\n" + "this is false\r\n" + "but if else if"; List<DiffRow> rows = generator.generateDiffRows(Arrays.asList(text1), Arrays.asList(text2)); for (DiffRow diffRow : rows) { System.out.println(diffRow.getOldLine()); } } }Bu uygulama çalıştırıldığında aşağıdaki gibi çıktı üretir :
~a~**an** Example is ~sucessfull~**successfull** this is ~true~**false** but if else** if**İlk satırda a ifadesi silinip an yapılmış, sucessfull ifadesi düzeltilip successfull yapılmış. İkinci satırda true yerine false yapılmış. Üçüncü satırda ise fazladan bir if eklenmiş. Görüldüğü gibi hepsi tespit edilmiştir. Eğer eski ve yenisini aynı anda görmek istiyorsanız aşağıdaki gibi yapabilirsiniz :
import java.util.Arrays; import java.util.List; import com.github.difflib.algorithm.DiffException; import com.github.difflib.text.DiffRow; import com.github.difflib.text.DiffRowGenerator; public class TestDelta3 { public static void main(String[] args) throws DiffException { DiffRowGenerator generator = DiffRowGenerator.create() .showInlineDiffs(true) .inlineDiffByWord(true) .oldTag(f -> "~") .newTag(f -> "**") .build(); String text1="a Example is sucessfull\r\n" + "this is true\r\n" + "but if else"; String text2="an Example is successfull\r\n" + "this is false\r\n" + "but if else if"; List<DiffRow> rows = generator.generateDiffRows(Arrays.asList(text1), Arrays.asList(text2)); for (DiffRow row : rows) { System.out.println(row.getOldLine() + "--->" + row.getNewLine()); System.out.println(); } } }Bu uygulama çalıştırıldığında aşağıdaki gibi bir çıktı üretecektir :
~a~ Example is ~sucessfull~ --->**an** Example is **successfull** this is ~true~ --->this is **false** but if else--->but if else** if**Görüldüğü gibi eski satırda silinenler ~ ile gösterilirken, yeni kayıtta ** şeklinde gösterilir.
public void parse(String text) { syllable=new ArrayList<String>(); syllable(text); Collections.reverse(syllable); } void syllable(String text) { if(text==null||text.isEmpty()) { return; } int lastIndex=TurkishLanguage.findLastVowelIndex(text); if(lastIndex>0) { if(TurkishLanguage.isVowel(text.charAt(lastIndex-1))) { syllable.add(text.substring(lastIndex)); syllable(text.substring(0,lastIndex)); }else { syllable.add(text.substring(lastIndex-1)); syllable(text.substring(0,lastIndex-1)); } }else { syllable.add(text); return; } }TurkishLanguage.findLastVowelIndex yöntemi son ünlünün index'ini veren bir yöntemdir :
public static Character findLastVowel(String word) { for (int i = word.length() - 1; i >= 0; i--) { char c = word.charAt(i); if (TurkishLanguage.isVowel(c)) { return c; } } return null; }TurkishLanguage.isVowel(c) ile bir karakter ünlü mü değil mi döndüren basit bir yöntemdir.
@Test public void parseTest() { String text="katanlardan"; SyllableParser parser=new SyllableParser(); parser.parse(text); System.out.println(parser.getSyllable()); }Çıktı aşağıdaki gibi olacaktır :
[ka, tan, lar, dan]Bu yöntem tren gibi, sarımtrak, elektrik, spor gibi sözcüklerde işe yaramamaktadır. Bu yöntem yerine daha gelişmiş bir yöntem gerekir.
public int getCountSyllable(String text) { Pattern p = Pattern.compile("[aAeEiİıIoOöÖuUüÜâÂûÛîÎ]", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); Matcher m = p.matcher(text); int i=0; while (m.find()) { i++; } return i; }Java 9 ve sonrası için döngü açıp saymak yerine aşağıdaki gibi bulunabilir:
int count=(int) m.results().count();