Java setara dengan string verbatim C # dengan @

101

Pertanyaan cepat. Apakah ada padanan @ seperti yang diterapkan pada string di Java:

Misalnya saya dapat melakukannya @"c:\afolder\afile"di C # dan membiarkannya mengabaikan karakter escape saat memproses alih-alih harus melakukannya "c:\\afolder\\aFile". Apakah ada padanan Java?

hmmm: stackoverflow keluar dari saya .. lol. Contoh kedua harus membaca:

c: (double-backslash) afolder (double-backslash) aFile

Simon Rigby
sumber
2
Kemungkinan duplikat dari: stackoverflow.com/questions/2018556/…
codaddict
2
Mengambil kebebasan untuk mengklarifikasi judul karena @dapat digunakan untuk menggunakan kata kunci bahasa sebagai pengenal juga.
Joey
@unicornaddict - ya memang pertanyaannya sama. Permintaan maaf tidak melihatnya saat menelusuri. @ Johannes - langkah yang baik .. terima kasih
Simon Rigby
Jika Anda ingin melakukan hal itu di Windows, dan Anda menggunakan Windows XP atau yang lebih baru (dan memang seharusnya!), Maka Anda dapat melakukan File file = new File ("C: / afolder / afile"); Di sisi lain, jika Anda ingin lebih portabel, Anda harus melihat jawaban @CPerkins yang sangat bagus.
Haakon Løtveit
Catatan (Januari 2018), literal string mentah mungkin datang untuk Java (JDK 10 atau lebih): lihat Di Java, apakah ada cara untuk menulis literal string tanpa harus keluar dari tanda kutip? .
VonC

Jawaban:

77

Tidak . Meloloskan / mengeluarkan string adalah satu-satunya pilihan Anda.

Kent Boogaart
sumber
7
saya suka c # 6 dengan @ "string" dan $ "string {i}" dan sangat berjangka lebih dari java
Guido Mocha
4
Berasal dari C # ke Java, ini sering kali merupakan penurunan dalam banyak hal
MikeKulls
33

Tidak, Java tidak memiliki literal string verbatim .

Jika Anda ingin bahasa Jawa-seperti (dan Jawa-VM-based) yang tidak , bagaimanapun, Anda mungkin ingin melihat Groovy yang memiliki berbagai bentuk string literal .

Jon Skeet
sumber
Tautan pertama (literal string verbatim) mengarah ke tautan "Visual Studio 2003 Pensiunan Dokumentasi Teknis" groovy.codehaus.org rusak
Vladas Maier
1
@ace: Diperbarui ke artikel "string" saat ini, yang menyertakan bagian tentang literal string verbatim. Tautan Groovy juga diperbarui.
Jon Skeet
16

Seperti yang dikatakan Kent dan Jon, tidak, tidak.

Saya menjawab hanya untuk menunjukkan bahwa meskipun ada, untuk kasus khusus Anda, itu akan menjadi ide yang buruk dalam kasus umum, dengan asumsi program lebih dari satu kali.

Program Java berjalan di lebih banyak platform daripada hanya Windows, dan platform lain memiliki pembatas file yang berbeda. Jadi, alih-alih berurusan dengan garis miring terbalik yang lolos, cara yang benar untuk menangani contoh khusus Anda adalah dengan mendapatkan properti pemisah file:


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

Di mana Anda telah membuat ROOTDIR secara terpisah berdasarkan beberapa kebijakan - tidak hanya platform, tetapi apakah Anda ingin "afile" Anda relatif terhadap root sistem file yang sebenarnya, atau relatif terhadap direktori home pengguna.

Tapi yang pasti, menggunakan properti pemisah file membuat program Anda lebih dapat digunakan secara luas. Apakah lebih banyak pekerjaan? Iya. Seperti yang dikatakan Wanda Sykes, "Tapi itu sepadan".

CPerkins
sumber
1
Hiya dan terima kasih. fakta bahwa itu adalah 'nama file' dalam kasus saya agak tidak relevan. Semua kode saya lakukan adalah mengambil string (atau mencoba) dan meneruskannya. Saya sebenarnya tidak melakukan apa pun dengannya selain menyebarkannya ke layanan web. Saya sedang menguji respons dari layanan ac # WCF yang dipanggil dari Java. Karena saya baru saja melakukan pengkodean tes keras, pada titik inilah saya menemukan batasan ini. I; m tidak benar-benar melakukan apa pun yang 'berbasis file' dengan string.
Simon Rigby
2
String verbatim bagus untuk pola regex.
Gordon Bean
12

Saat ini tidak didukung di Java tetapi mungkin tersedia di rilis mendatang. Telah dibuat JEP 326: Literal String Mentah pada 2018/01/23

Lihat kemajuannya di https://bugs.openjdk.java.net/browse/JDK-8196004

Mungkin suatu hari Anda akan dapat melakukannya dengan:

`c:\afolder\afile`

UPDATE: JEP diusulkan untuk drop dari JDK 12: 326: Raw String Literals (Preview) Anda dapat membaca alasannya di sini: http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

Dan detail lebih lanjut di sini https://bugs.openjdk.java.net/browse/JDK-8215682

Intinya : Tidak akan ada string kata demi kata di Jawa dalam waktu dekat. Dan kalaupun akan muncul itu malah tidak akan jadi ''.

engilyin
sumber
1
Karena ini adalah salah satu diskusi paling populer tentang masalah tersebut, JEP 326 telah ditarik. Diskusi dimulai kembali pada Jan 2019 , dan sekarang terlacak di JEP 355 untuk rilis JDK13.
NPras