C # 'ın @ ile harfi harfine dizelerinin Java eşdeğeri


101

Hızlı soru. Java'da dizelere uygulanan @ eşdeğeri var mı:

Örneğin @"c:\afolder\afile", C # ile yapabilirim ve işlerken yapmak zorunda kalmadan kaçış karakterlerini yoksaymasını sağlayabilirim "c:\\afolder\\aFile". Java eşdeğeri var mı?

hmmm: stackoverflow üzerimden kaçıyor .. lol. İkinci örnek şöyle olmalıdır:

c: (çift ters eğik çizgi) klasör (çift ters eğik çizgi) aFile



2
@Dil anahtar kelimelerini tanımlayıcı olarak kullanmak için de kullanılabildiğinden , başlığı netleştirme özgürlüğünü aldı .
Joey

@unicornaddict - evet aslında aynı soru. Özür dilerim bunu ararken görmedim. @ Johannes - iyi hareket .. teşekkürler
Simon Rigby

Bunu Windows'ta yapmak istiyorsanız ve Windows XP veya daha yenisini kullanıyorsanız (ve yapmanız gerekir!), O zaman File file = new File ("C: / afolder / afile"); Öte yandan, daha taşınabilir olmak istiyorsanız, @CPerkins'in mükemmel cevabına bakmalısınız.
Haakon Løtveit

Not (Ocak 2018), Java için ham dize değişmezleri gelebilir (JDK 10 veya daha fazlası): bkz . Java'da, tırnak işaretlerinden kaçmak zorunda kalmadan bir dize değişmezi yazmanın bir yolu var mı? .
VonC

Yanıtlar:


77

Hayır . Dizeden kaçmak / dışa aktarmak tek seçeneğinizdir.


7
@ "string" ve $ "string {i}" ile c # 6'yı ve java'dan çok gelecek
Guido Mocha

4
C #'dan Java'ya gelmek, pek çok yönden çoğu zaman bir geri adımdır
MikeKulls

33

Hayır, Java'da harfi harfine dize değişmezleri yoktur .

Bir Java benzeri (ve Java VM tabanlı) dilini istiyorsanız yapar , ancak, bakmak isteyebilirsiniz Groovy sahiptir dize çeşitli formları .


İlk bağlantı (kelimesi kelimesine dize değişmezleri) "Visual Studio 2003 Retired Technical Document" groovy.codehaus.org bağlantılarına işaret ediyor
Vladas Maier

1
@ace: Birebir dize değişmezleri hakkında bir bölüm içeren geçerli "dize" makalesine güncellendi. Groovy bağlantıları da güncellendi.
Jon Skeet

16

Kent ve Jon'un dediği gibi, hayır yoktur.

Sadece sizin özel durumunuz için olsa bile, birden fazla programı varsayarsak, genel durumda kötü bir fikir olacağını belirtmek için yanıtlıyorum.

Java programları Windows'tan daha fazla platformda çalışır ve diğer platformlarda farklı dosya sınırlayıcıları bulunur. Bu nedenle, kaçan ters eğik çizgilerle uğraşmak yerine, belirli örneğinizi işlemenin doğru yolu, dosya ayırıcı özelliğini almaktır:


    String sep = System.getProperty("file.separator");
    String filename = ROOTDIR + sep + "folder" + sep + "afile";

ROOTDIR'ı bazı politikalara dayalı olarak ayrı ayrı oluşturduğunuz yer - sadece platforma değil, "dosyanızın" gerçek dosya sistemi köküne göre mi yoksa kullanıcının ana dizinine göre mi olmasını istediğiniz.

Ancak kesinlikle, dosya ayırıcı özelliğini kullanmak, programlarınızı daha yaygın olarak kullanılabilir hale getirir. Daha çok iş mi? Evet. Wanda Sykes'in dediği gibi, "Ama buna değer".


1
Selam ve teşekkürler. benim durumumda bunun bir 'dosya adı' olması bir nevi alakasız. Kodumun yaptığı tek şey bir dizge almak (veya yapmaya çalışmak) ve onu iletmek. Aslında onunla bir web hizmetine aktarmak dışında hiçbir şey yapmıyorum. Java'dan çağrılan ac # WCF hizmetinden gelen yanıtı test ediyordum. Sadece bir testi kodlarken, bu noktada bu sınırlamayı keşfettim. Aslında dizeyle 'dosya tabanlı' hiçbir şey yapmıyorum.
Simon Rigby

2
Verbatim dizeleri normal ifade kalıpları için harikadır.
Gordon Bean

12

Şu anda Java'da desteklenmemektedir ancak gelecekteki sürümlerde mevcut olabilir. Orada oluşturulan Ham Dizi Hazır: JEP 326 2018/01/23 at

İlerlemeyi https://bugs.openjdk.java.net/browse/JDK-8196004 adresinde görün

Muhtemelen bir gün şunları yapabileceksiniz:

`c:\afolder\afile`

GÜNCELLEME: JEP, JDK 12: 326: Raw String Literals (Önizleme) 'den düşürülmeyi önerdi. Gerekçeyi buradan okuyabilirsiniz: http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

Ve daha fazla ayrıntı burada https://bugs.openjdk.java.net/browse/JDK-8215682

Sonuç olarak : Yakın gelecekte Java'da kelimesi kelimesine dizeler olmayacak. Ve görünecek olsa bile, daha çok olmayacak ''.


1
Bu konudaki en popüler tartışmalardan biri olarak görüldüğünde JEP 326 geri çekildi. Tartışma Ocak 2019'da yeniden başlatıldı ve şimdi bir JDK13 sürümü için JEP 355'te izleniyor.
NPras
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.