Kotlin'de stringin belli bir bölümü nasıl alınır?

Merhaba, ben Kotlin programlama dilinde kullanıcıdan bir veri almak istiyorum ve bunu string data type olan bir değişkene kaydetmek istiyorum. Kaydettikten sonrada bu verinin bir kısmını almak istiyorum. Nasıl yapabilirim?

Not: 3. , 5. şeklinde karakterleri almak istemiyorum. Benim belirttiğim değeri almak istiyorum.

Örnek:
var domain = “www.domain.com
Burada mesela www ve .com ibaresini almak istemiyorum. Sadece domain yazısını almak istiyorum.

Kotlinin String metodlarına bak kontlin ile bilgim yok

Degeri nasil belirtiyorsun?

Bir algoritma belirleyecek veya yontem tavsiye edecek kadar yeterli ornek belirtmemissin.

Yani mesela sen bana http://www.domain.com girdisini verdin. Ben de bu girdiden http://, www, .com gibi ifadeleri kaldırmak geriye kalan sözcüğü almak istiyorum.

x = "http://www.example.com"
banned_parts = ["www.", ".com", "http://"]
for p in banned_parts:
     x = x.replace(p, "")

Merhaba,
https://www.adnanadele.com.tr
Algoritma bu örnekte çöküyor :yum:

Google’da get domain from URL in kotlin diye arattırınca kotlin kullanan bir çözüm görmedim. Kotlin olmasa da Java için olan çözümü atayım.

Kotlin Java mudaili gibi bir şey olduğu için kotlinin dokümanını buraya bırakıyorum. Kusura bakma şu an deneyemiyorum bunları. Kolay gelsin.

Burada istediğiniz şu : www.domain.com girdisi domain olarak çıktı versin. Noktalardan öncesini ve sonrasını almamayı denediniz mı?

Arkadas o url’i vermemis ki :slight_smile: Ben arkadasin gosterdigi formattaki urlleri ceviren programi yazdim. Eger herhangi bir formatta rastgele url deseydi ona gore kod yazardim.

Kotlin denmis ama ben py ile algoritmayi gosterdim, @Kotlin kotline çevirebilir.

1 Beğeni

Buradan bir problem cikarmis olalim.

Verillen url’in subdomain disinda sadece domain’ini veren fonksiyon. Test caseler:

assert get_domain("http://forum.yazbel.com") == "yazbel"
assert get_domain("http://www.forum.yazbel.com/") == "yazbel"
assert get_domain("https://www.yazbel.com/") == "yazbel"
assert get_domain("http://www.forum.yazbel.com/hello?q=yazbel&t=harmonica") == "yazbel"

Hos problem oldu, buyrun efendim. (Regex olmadan zor gorunuyor :confused: )

Hangi subdomain? yazbel de com'un subdomain’i.

HTTP disinda protokoller, userinfo, domain disinda host parcasi, domain’e benzeyip olmayanlar gibi bir suru edge case de eksik :slight_smile:

URL parser kutuphanesi olmadan zor.

Teknik olarak oyle evet :confused: O zaman soyle diyelim, verilen url’i com, org gibi common ifadelerden ayirip veren fonskiyon. (URL’in devamindan da ayiracak.) URL standartlarini arastiriyorum, pek iyi ifade edemedim.

Ekleyelim. (Ilk kisim haric diger kisimlarin ne oldugunu bilmiyorum, ogrenip geleyim.) (Wiki yaptim, test case ekleyebilirsiniz.) Bu arada problemi sadece http/https icin yapsak iyi olur, file:///home/emre/hello.py de bir url sonucta, ki daha niceleri var.

Selamlar benim de bir sorum olacak ama bilginiz varsa yanıtlarsanız sevinirim .

Kullanıcıdan konsoldan string bir ifade alacağım bunu Scanner(System.‘in’) ile yapıyorum yani burada readLine() ile de alabilirim ama veri alma şeklim değiştiğinde kullanacağım fonksiyonlar da denemelerimde değiştiğini gözlemledim o yüzden hangisi olduğu bu noktada önemli.
Bu almış olduğum string veri içerisinde Türkçe karakterler varsa onları konsola yazdıracagım. Örneğin;
Herşey çok güzel olacak gibi bir giriş yapıldı. ş,ü türkçe karakterler içerir gibi bir cıktı vermesini istiyorum. Yardım ederseniz sevinirim.

Arkadaşlar soruma cevap buldum. Sizlerle de paylaşmak istedim belki bir gün ihtiyacınız olur.

fun main(Args: Array) {

println("Type Anything to Find Turkish Characters:")

val input = Scanner(System.`in`)
val text: String = input.nextLine()

val turkishCharacters= arrayOf("ç","ğ","İ","ı","ö","ü","ş")

val characters = text.toCharArray()

for (char in characters) {
    if (turkishCharacters.contains(char.toString())){
       println(char)

    } else {
            println("Türkçe Karakter Bulunamadı")
        }
    }
}

Çıktı: aşı oldum
Türkçe Karakter Bulunamadı
ş
ı
Türkçe Karakter Bulunamadı
Türkçe Karakter Bulunamadı
Türkçe Karakter Bulunamadı
Türkçe Karakter Bulunamadı
Türkçe Karakter Bulunamadı
Türkçe Karakter Bulunamadı

ilk yöntem de çıktı bu şekilde veriyor.

İkinci yöntem de daha mantıklı çıktı alabiliyorum üzerine çok kafa yordum yardım aldım sizlere de faydası dokunur umarım.

fun main(Args: Array) {

println("Type Anything to Find Turkish Characters:")

val input = Scanner(System.`in`)
val text: String = input.nextLine()

val turkishCharacters= arrayOf("ç","ğ","İ","ı","ö","ü","ş")

val characters = text.toCharArray()

val charMap = HashMap<String,Int>()

for (char in characters) {
    if (turkishCharacters.contains(char.toString())){
        if(charMap.containsKey(char.toString())){
            val count = charMap[char.toString()] ?: 0
            charMap[char.toString()] = count + 1

        } else {
            charMap[char.toString()] = 1
        }
    }
}
for ((key, value) in charMap) {
    println("$key = $value")
}
//Tüm işlemler taramalar gerçekleştikten sonra kontrol yapımızı kurduk ve hashMap'e değer aktarılmadıysa bunu yazdırdık.
if (charMap.isEmpty()){
    println("Türkçe Karakter Bulunamadı")
}

}

Çıktı : ahmet
Türkçe Karakter Bulunamadı

Çıktı: aşırı
ı = 2
ş = 1

Herkese iyi çalışmalar…

1 Beğeni