Java เทียบเท่ากับสตริงคำต่อคำของ C # ที่มี @


101

คำถามอย่างรวดเร็ว. มี @ เทียบเท่ากับที่ใช้กับสตริงใน Java หรือไม่:

ยกตัวอย่างเช่นที่ฉันจะทำ@"c:\afolder\afile"ใน C # "c:\\afolder\\aFile"และมีมันไม่สนใจตัวหนีเมื่อประมวลผลแทนต้องทำอย่างไร มี Java เทียบเท่าหรือไม่?

อืมม: stackoverflow กำลังหนีฉัน .. lol ตัวอย่างที่สองควรอ่าน:

c: (แบ็กสแลชคู่) โฟลเดอร์ (แบ็กสแลชคู่) aFile


2
อาจซ้ำกันของ: stackoverflow.com/questions/2018556/…
codaddict

2
ใช้เสรีภาพในการชี้แจงชื่อเรื่องเนื่องจาก@สามารถใช้คำหลักภาษาเป็นตัวระบุได้เช่นกัน
Joey

@unicornaddict - ใช่มันเป็นคำถามเดียวกัน ขออภัยไม่เห็นสิ่งนั้นเมื่อค้นหา @ Johannes - ไปได้ดี .. ขอบคุณ
Simon Rigby

หากคุณต้องการทำเช่นนั้นใน Windows และคุณใช้ Windows XP หรือใหม่กว่า (และคุณควร!) คุณสามารถทำได้แค่ File file = new File ("C: / afolder / afile"); ในทางกลับกันหากคุณต้องการพกพามากขึ้นคุณควรดูคำตอบที่ยอดเยี่ยมของ @CPerkins
Haakon Løtveit

หมายเหตุ (ม.ค. 2018) ลิเทอรัลสตริงดิบอาจมาสำหรับ Java (JDK 10 ขึ้นไป): ดูใน Java มีวิธีเขียนสตริงลิเทอรัลโดยไม่ต้องเว้นเครื่องหมายคำพูดหรือไม่ .
VonC

คำตอบ:


77

ไม่ การหลีกเลี่ยง / การกำหนดสตริงภายนอกเป็นทางเลือกเดียวของคุณ


7
ฉันชอบ c # 6 ที่มี @ "string" และ $ "string {i}" และมีฟิวเจอร์สมากกว่า java
Guido Mocha

4
การมาจาก C # ไปยัง Java มักจะมีการลดขั้นตอนลงหลายวิธี
MikeKulls

33

ไม่มี, Java ไม่ได้มีตัวอักษรของสตริงคำต่อคำ

ถ้าคุณต้องการ Java เหมือน (และ Java-VM-based) ภาษาที่ไม่แต่คุณอาจต้องการที่จะดูที่Groovyซึ่งมีรูปแบบต่างๆของสตริงตัวอักษร


ลิงก์แรก (ตัวอักษรสตริงคำต่อคำ) ชี้ไปที่ลิงก์"Visual Studio 2003 Retired เอกสารทางเทคนิค" groovy.codehaus.orgใช้งานไม่ได้
Vladas Maier

1
@ace: อัปเดตเป็นบทความ "สตริง" ปัจจุบันซึ่งรวมถึงส่วนเกี่ยวกับตัวอักษรสตริงคำต่อคำ อัปเดตลิงก์ Groovy ด้วย
Jon Skeet

16

ดังที่เคนท์และจอนได้กล่าวไว้ไม่มีไม่ได้

ฉันตอบเพียงเพื่อชี้ให้เห็นว่าแม้ว่าจะมีสำหรับกรณีเฉพาะของคุณ แต่มันก็เป็นความคิดที่ไม่ดีในกรณีทั่วไปโดยสมมติว่ามีโปรแกรมมากกว่าหนึ่งครั้ง

โปรแกรม Java ทำงานบนแพลตฟอร์มมากกว่า Windows และแพลตฟอร์มอื่น ๆ มีตัวคั่นไฟล์ที่แตกต่างกัน ดังนั้นแทนที่จะจัดการกับแบ็กสแลชที่ใช้ Escape วิธีที่ถูกต้องในการจัดการกับตัวอย่างของคุณคือการรับคุณสมบัติตัวคั่นไฟล์:


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

ในกรณีที่คุณสร้าง ROOTDIR แยกตามนโยบายบางอย่างไม่ใช่เฉพาะแพลตฟอร์ม แต่คุณต้องการให้ "afile" สัมพันธ์กับรูทระบบไฟล์จริงหรือเทียบกับโฮมไดเร็กทอรีของผู้ใช้

แต่แน่นอนว่าการใช้คุณสมบัติตัวคั่นไฟล์ทำให้โปรแกรมของคุณใช้งานได้กว้างขวางมากขึ้น งานเยอะขึ้นไหม? ใช่. ดังที่ Wanda Sykes กล่าวว่า "แต่ก็คุ้มค่า"


1
สวัสดีและขอบคุณ ความจริงที่ว่ามันเป็น 'ชื่อไฟล์' ในกรณีของฉันไม่เกี่ยวข้อง รหัสทั้งหมดของฉันกำลังทำคือการสตริง (หรือพยายาม) แล้วส่งต่อ ฉันไม่ได้ทำอะไรกับมันนอกจากส่งต่อไปยังบริการบนเว็บ ฉันกำลังทดสอบการตอบสนองจากบริการ ac # WCF ที่ถูกเรียกจาก Java ในขณะที่ฉันเพียงแค่ทดสอบการเข้ารหัสอย่างยากลำบากในตอนนี้ฉันจึงค้นพบข้อ จำกัด นี้ ฉันไม่ได้ทำอะไรเลย 'file based' กับสตริง
Simon Rigby

2
สตริงคำต่อคำเหมาะอย่างยิ่งสำหรับรูปแบบนิพจน์ทั่วไป
Gordon Bean

12

ปัจจุบันยังไม่รองรับ Java แต่อาจมีให้ใช้งานในอนาคต มีการสร้างJEP 326: Raw String Literals ที่ 2018/01/23

ดูความคืบหน้าได้ที่https://bugs.openjdk.java.net/browse/JDK-8196004

สักวันคุณจะสามารถทำได้ด้วย:

`c:\afolder\afile`

UPDATE: JEP เสนอให้ออกจาก JDK 12: 326: Raw String Literals (ดูตัวอย่าง) คุณสามารถอ่านเหตุผลได้ที่นี่: http://mail.openjdk.java.net/pipermail/jdk-dev/2018-De December/002402.html

และรายละเอียดเพิ่มเติมที่นี่https://bugs.openjdk.java.net/browse/JDK-8215682

บรรทัดล่าง : จะไม่มีสตริงคำต่อคำใน Java ในอนาคตอันใกล้นี้ และแม้ว่ามันจะปรากฏขึ้น แต่ก็จะไม่เป็นเช่นนั้น ".


1
เมื่อเห็นว่านี่เป็นหนึ่งในการอภิปรายที่ได้รับความนิยมมากที่สุดJEP 326จึงถูกถอนออกไป การสนทนาเริ่มต้นใหม่ในเดือนมกราคม 2019และตอนนี้ติดตามในJEP 355สำหรับรุ่น JDK13
NPras
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.