Java tương đương với chuỗi nguyên văn của C # với @


101

Câu hỏi nhanh. Có tương đương với @ như được áp dụng cho chuỗi trong Java không:

Ví dụ, tôi có thể làm @"c:\afolder\afile"trong C # và nó bỏ qua các ký tự thoát khi xử lý thay vì phải làm "c:\\afolder\\aFile". Có Java tương đương không?

hmmm: stackoverflow đang thoát ra khỏi tôi .. lol. Ví dụ thứ hai nên đọc:

c: (dấu gạch chéo ngược kép) afolder (dấu gạch chéo ngược kép) aFile


2
Có thể có bản sao của: stackoverflow.com/questions/2018556/…
codaddict vào

2
Có quyền tự do làm rõ tiêu đề vì @có thể được sử dụng để sử dụng các từ khóa ngôn ngữ làm định danh.
Joey

@unicornaddict - đúng là câu hỏi tương tự. Xin lỗi không thấy điều đó khi tìm kiếm. @ Johannes - di chuyển tốt .. cảm ơn
Simon Rigby

Nếu bạn chỉ muốn làm điều đó trong Windows và bạn sử dụng Windows XP hoặc mới hơn (và bạn nên làm như vậy!), Thì bạn có thể thực hiện File file = new File ("C: / afolder / afile"); Mặt khác, nếu bạn muốn di động hơn, bạn nên xem câu trả lời tuyệt vời của @CPerkins.
Haakon Løtveit

Lưu ý (tháng 1 năm 2018), các ký tự chuỗi thô có thể đến với Java (JDK 10 trở lên): xem Trong Java, có cách nào để viết một chuỗi ký tự mà không cần phải thoát khỏi dấu ngoặc kép không? .
VonC

Câu trả lời:


77

Không . Thoát / mở rộng chuỗi là lựa chọn duy nhất của bạn.


7
tôi yêu c # 6 với @ "string" và $ "string {i}" và rất tương lai hơn java
Guido Mocha

4
Đến từ C # để Java nó là khá thường xuyên một xuống bước trong rất nhiều cách khác nhau
MikeKulls

33

Không, Java không có các ký tự chuỗi nguyên văn .

Nếu bạn muốn có một ngôn ngữ Java tương tự (và Java-VM-based) mà làm , tuy nhiên, bạn có thể muốn nhìn vào Groovy trong đó có các hình thức khác nhau của chuỗi chữ .


Liên kết đầu tiên (nguyên văn chuỗi ký tự) trỏ đến liên kết "Tài liệu kỹ thuật đã nghỉ hưu của Visual Studio 2003" groovy.codehaus.org bị hỏng
Vladas Maier

1
@ace: Đã cập nhật bài viết hiện tại về "chuỗi", bao gồm một phần về các ký tự chuỗi nguyên văn. Cũng cập nhật liên kết Groovy.
Jon Skeet

16

Như Kent và Jon đã nói, không có.

Tôi trả lời chỉ để chỉ ra rằng ngay cả khi có, đối với trường hợp cụ thể của bạn, đó sẽ là một ý tưởng tồi trong trường hợp chung, giả sử là một chương trình nhiều hơn một lần.

Các chương trình Java chạy trên nhiều nền tảng hơn chỉ Windows và các nền tảng khác có các dấu phân cách tệp khác nhau. Vì vậy, thay vì xử lý các dấu gạch chéo ngược thoát, cách chính xác để xử lý ví dụ cụ thể của bạn là lấy thuộc tính dấu phân tách tệp:


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

Nơi bạn đã tạo riêng ROOTDIR dựa trên một số chính sách - không chỉ nền tảng, mà còn cho dù bạn muốn "hồ sơ" của mình liên quan đến gốc hệ thống tệp thực hay liên quan đến thư mục chính của người dùng.

Nhưng chắc chắn, việc sử dụng thuộc tính phân tách tệp làm cho các chương trình của bạn có thể sử dụng rộng rãi hơn. Nó có nhiều công việc hơn không? Đúng. Như Wanda Sykes nói, "Nhưng nó đáng giá".


1
Hiya và cảm ơn. thực tế là nó là 'tên tệp' trong trường hợp của tôi thuộc loại không liên quan. Tất cả những gì mã của tôi đang làm là lấy một chuỗi (hoặc cố gắng) và chuyển nó. Tôi không thực sự làm bất cứ điều gì với nó ngoài việc chuyển nó cho một dịch vụ web. Tôi đang kiểm tra phản hồi từ dịch vụ ac # WCF được gọi từ Java. Vì tôi chỉ chăm chỉ viết mã một bài kiểm tra, nên tại thời điểm này, tôi phát hiện ra hạn chế này. Tôi không thực sự làm bất cứ điều gì 'dựa trên tệp' với chuỗi.
Simon Rigby

2
Chuỗi nguyên văn rất tốt cho các mẫu regex.
Gordon Bean

12

Hiện tại nó không được hỗ trợ trong Java nhưng có thể có trong các bản phát hành trong tương lai. Đã có JEP 326: Raw String Literals được tạo vào 2018/01/23

Xem tiến trình tại https://bugs.openjdk.java.net/browse/JDK-8196004

Có thể một ngày nào đó bạn sẽ làm được với:

`c:\afolder\afile`

CẬP NHẬT: JEP đề xuất loại bỏ khỏi JDK 12: 326: Raw String Literals (Xem trước) Bạn có thể đọc cơ sở lý luận tại đây: http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

Và thêm thông tin chi tiết tại đây https://bugs.openjdk.java.net/browse/JDK-8215682

Điểm mấu chốt : Sẽ không có chuỗi nguyên văn trong Java trong tương lai gần. Và ngay cả khi nó sẽ xuất hiện, nó sẽ không phải là ''.


1
Vì đây là một trong những cuộc thảo luận phổ biến nhất về vấn đề này, JEP 326 đã bị rút lại. Cuộc thảo luận đã được bắt đầu lại vào tháng 1 năm 2019 và hiện được theo dõi trong JEP 355 cho bản phát hành JDK13.
NPras
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.