Pattern etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Pattern etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

3 Mayıs 2023 Çarşamba

Pattern.asPredicate metodu - contains Anlamına Gelir

Giriş
Java 11 ile geliyor. 
Pattern.asMatchPredicate() girdi string ile tamamen eşleşme olduğunu kontrol eder
Pattern.asPredicate () ise girdi string ile contains() olduğunu kontrol eder

Örnek
Farkı görmek için şöyle yaparız
var words = List.of ("List", "toList"]

var words2 = words.stream()
  .filter(Pattern.compile("List").asPredicate())
  .toList();

var words3 = words.stream()
  .filter(Pattern.compile("List").asMatchPredicate())
  .toList();
        
System.out.println(words2); // [List, toList]
System.out.println(words3); // [List]

Pattern.splitAsStream metodu - Split İşlemini Yapar ve Stream Döner

Giriş
String'i belirtilen örüntüye göre ayırıp stream döner. Aslında String.split() ile aynı işi yapıyor fakat direkt stream döndüğü için daha az kod yazılıyor

Örnek
Şöyle yaparız
String sentence = "Tandrew quickly registered for the dating site";
Pattern pattern = Pattern.compile("\\s"); // split at spaces
Stream<String> words = pattern.splitAsStream(sentence);

for (Object s : words.toArray()){
  System.out.println(s);
}

/* Output:
    Tandrew
    quickly
    registered
    for
    the
    dating
    site
*/
Örnek
Şöyle yaparız.
Pattern pattern = Pattern.compile("-|\\.");

pattern.splitAsStream(str) // your String
       .map(Double::parseDouble)
       .toArray(Double[]::new);
Örnek
Elimizde şöyle bir kod olsun.
List<String> locations = Arrays.asList("US:5423","US:6321","CA:1326","AU:5631");
Şu hale getirmek isteyelim.
AU = [5631]
CA = [1326]
US = [5423, 6321]
Şöyle yaparız.
Pattern DELIMITER = Pattern.compile(":");

Map<String, List<String>> locationMap = locations.stream()
    .map(s -> DELIMITER.splitAsStream(s).toArray(String[]::new))
        .collect(Collectors.groupingBy(a -> a[0], 
            Collectors.mapping(a -> a[1], Collectors.toList())));

30 Mayıs 2019 Perşembe

Pattern Sınıfı

Giriş
Düzenli İfade (Regular Expression veya RegEx) için temel sınıftır.

compile metodu - string
Verilen düzenli ifadeyi bir nesne haline getirir.
Pattern pattern = Pattern.compile("...");
Gördüğüm örnekler
AlphaNumeric = [A-Za-z\\d]+
Numeric = \\d+
Spaces = [ \t]+
Date in DD-MM-YYY =([012]\\d|3[01])-(0\\d|1[012])-(\\d{4})
compile metodu - string + flag
Şöyle yaparız.
Pattern pattern =Pattern.compile("...", Pattern.CASE_INSENSITIVE);
asPredicate metodu
asPredicate metodu yazısına taşıdım

matcher metodu
Matcher döner. Girdi ile düzenli ifadeyi eşleştirir.
String line = "...";
Pattern pattern=Pattern.compile("...");
Matcher matcher=pattern.matcher(line);
splitAsStream metodu
splitAsStream metodu yazısına taşıdım

Diğer
1. Look Ahead ve Look Behind
Açıklaması şöyle.
(?<!\d)  # negative lookbehind to assert previous char is not a digit
\d{2}    # match exact 2 digits
:        # match a colon
\d{2}    # match exact 2 digits
(?!\d)   # negative lookahead to assert next char is not a digit
Negative Lookahead
Belirtilen şey ile başlamayan anlamına gelir.
Örnek
Şöyle yaparız. Burada amaç sayının başındaki 0 rakamlarını silmek. İlk capture group "-" veya boş string olabilir. Daha sonra bir veya daha fazla 0 gelebilir. Sonra negative lookahead ile 0'lardan sonra hemen string'in bitmediğini garanti ederiz. Tüm -000 şeklindeki karakterler - ile yer değiştirir. Tüm 000 şeklindeki karakterler "" yani boş string ile yer değiştirir.
"00000050.43".replaceFirst("^(-?)0+(?!$)", "$1")
Örnek
Şöyle yaparız. Bu / karakterine göre ayırır, ancak / karakterinin satır başında olmaması gerekir.
String[] res = "/token1/token2/token3".split("(?!^)/");
System.out.println(res[0]); // => /token1