Java-еквівалент дослідницьких рядків C # 'з @


101

Швидке запитання. Чи існує еквівалент @, який застосовується до рядків на Java:

Наприклад, я можу зробити @"c:\afolder\afile"в C # і змусити його ігнорувати символи втечі при обробці, а не робити "c:\\afolder\\aFile". Чи існує еквівалент Java?

хммм: stackoverflow втікає на мене .. lol. Другий приклад повинен читати:

c: (подвійний зворотний кут нахилу) aold (подвійний нахил)


2
Можливий дублікат: stackoverflow.com/questions/2018556 / ...
codaddict

2
Ви @можете роз'яснити назву, оскільки можна використовувати й мовні ключові слова як ідентифікатори.
Joey

@unicornaddict - так, це справді те саме питання. Вибачення не бачили цього при пошуку. @ Йоханнес - хороший хід .. спасибі
Саймон Рігбі

Якщо ви хочете зробити саме це в 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) мови, який є, ви можете подивитися на Groovy, який має різні форми літерального рядка .


Перше посилання (дослівно-рядкові літерали) вказує на "Технічну документацію на пенсію на Visual Studio 2003"groovy.codehaus.org ,
ламано

1
@ace: оновлено до поточної "рядкової" статті, яка включає розділ про дослівно-рядкові літерали. Також оновлені посилання Groovy.
Джон Скіт

16

Як сказали Кент і Джон, ні там немає.

Я відповідаю лише на те, щоб навіть для вашого конкретного випадку це було б погано, якщо прийняти більш ніж разову програму.

Програми Java працюють на більш ніж платформах Windows, а інші платформи мають різні роздільники файлів. Таким чином, замість того, щоб мати справу з відхиленими косою рисою, правильним способом обробки вашого конкретного прикладу є отримання властивості роздільника файлів:


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

Там, де ви б окремо створили ROOTDIR на основі певної політики - не тільки платформи, а й того, чи хочете ви, щоб ваш "afile" був відносно фактичного кореня файлової системи чи відносно домашнього каталогу користувача.

Але безумовно, використання властивості розділювача файлів робить ваші програми більш широкими. Це більше роботи? Так. Як каже Ванда Сайкс, "але воно того варте".


1
Привіт і спасибі той факт, що його "ім'я файлу" в моєму випадку не має значення. Увесь мій код - це взяти рядок (або спробувати) і передати його. Я насправді з цим нічого не роблю, крім того, щоб передати його веб-службі. Я тестував відповідь служби дзвінка AC # WCF, яку викликали з Java. Оскільки я просто важко кодував тест, саме в цей момент я виявив це обмеження. Я фактично не роблю нічого, що базується на файлі ".
Саймон Рігбі

2
Дослідні рядки чудово підходять для моделей регулярних виразів.
Гордон Бін

12

Наразі він не підтримується на Java, але може бути доступний у майбутніх випусках. Там було створено JEP 326: Raw String Literals 2018/01/23

Про хід дивіться на https://bugs.openjdk.java.net/browse/JDK-8196004

Напевно, колись вам вдасться це зробити:

`c:\afolder\afile`

ОНОВЛЕННЯ: JEP запропонував відмовитися від JDK 12: 326: Raw String Literals (попередній перегляд) Обґрунтування можна прочитати тут: http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

І докладніше тут https://bugs.openjdk.java.net/browse/JDK-8215682

Підсумок : найближчим часом у Java не буде дослідних рядків. І навіть якщо він з'явиться, це скоріше не буде ``.


1
Вважаючи, що це одна з найпопулярніших дискусій з цього питання, JEP 326 були зняті. Обговорення було відновлено в січні 2019 року і тепер відстежується в JEP 355 для випуску JDK13.
NPras
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.