Equivalente Java delle stringhe verbatim di C # con @


101

Domanda veloce. Esiste un equivalente di @ applicato alle stringhe in Java:

Ad esempio, posso farlo @"c:\afolder\afile"in C # e fare in modo che ignori i caratteri di escape durante l'elaborazione invece di doverlo fare "c:\\afolder\\aFile". Esiste un equivalente Java?

hmmm: stackoverflow mi sta sfuggendo .. lol. Il secondo esempio dovrebbe leggere:

c: (doppia barra rovesciata) afolder (doppia barra rovesciata) aFile



2
Mi sono preso la libertà di chiarire il titolo poiché @può essere utilizzato anche per utilizzare le parole chiave della lingua come identificatori.
Joey

@unicornaddict - sì, davvero è la stessa domanda. Mi scuso non l'ho visto durante la ricerca. @ Johannes - buona mossa .. grazie
Simon Rigby

Se vuoi farlo in Windows e usi Windows XP o più recente (e dovresti!), Allora puoi semplicemente fare File file = new File ("C: / afolder / afile"); D'altra parte, se vuoi essere più portabile, dovresti guardare l'eccellente risposta di @CPerkins.
Haakon Løtveit

Nota (gennaio 2018), potrebbero essere in arrivo stringhe letterali non elaborate per Java (JDK 10 o più): vedere In Java, esiste un modo per scrivere una stringa letterale senza dover sfuggire alle virgolette? .
VonC

Risposte:


77

No . L'escape / esternalizzazione della stringa è la tua unica scelta.


7
amo il c # 6 con @ "string" e $ "string {i}" e molto futures più di java
Guido Mocha

4
Venendo da C # a Java è abbastanza spesso un passo indietro in molti modi
MikeKulls

33

No, Java non ha stringhe letterali letterali .

Se vuoi un linguaggio simile a Java (e basato su Java-VM) che lo faccia , tuttavia, potresti voler guardare Groovy che ha varie forme di stringa letterale .


Il primo collegamento (stringhe letterali letterali) punta alla "Documentazione tecnica ritirata di Visual Studio 2003". I groovy.codehaus.org collegamenti sono interrotti
Vladas Maier

1
@ace: aggiornato all'attuale articolo "stringa", che include una sezione sui letterali stringa letterali. Aggiornati anche i link Groovy.
Jon Skeet

16

Come hanno detto Kent e Jon, no, non c'è.

Rispondo solo per sottolineare che anche se ci fosse, per il tuo caso particolare, sarebbe una cattiva idea nel caso generale, ipotizzando un programma più di una tantum.

I programmi Java vengono eseguiti su più piattaforme oltre a Windows e altre piattaforme hanno delimitatori di file diversi. Quindi, invece di gestire i backslash con escape, il modo corretto per gestire il tuo particolare esempio è ottenere la proprietà del separatore di file:


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

Dove avresti creato separatamente ROOTDIR in base a qualche politica - non solo la piattaforma, ma se vuoi che il tuo "file" sia relativo alla radice del file system effettivo, o relativo alla directory home dell'utente.

Ma sicuramente, l'utilizzo della proprietà separatore di file rende i tuoi programmi più ampiamente utilizzabili. È più lavoro? Sì. Come dice Wanda Sykes, "Ma ne vale la pena".


1
Ciao e grazie. il fatto che nel mio caso sia un "nome di file" è in qualche modo irrilevante. Tutto ciò che fa il mio codice è prendere una stringa (o provarci) e trasmetterla. In realtà non ci faccio altro che trasmetterlo a un servizio web. Stavo testando la risposta dal servizio ac # WCF chiamato da Java. Dato che stavo solo programmando un test, è stato a questo punto che ho scoperto questa limitazione. In realtà non sto facendo nulla "basato su file" con la stringa.
Simon Rigby

2
Le stringhe verbatim sono ottime per i modelli di espressioni regolari.
Gordon Bean

12

Attualmente non è supportato in Java ma potrebbe essere disponibile nelle versioni future. È stato creato JEP 326: Raw String Literals a 2018/01/23

Guarda i progressi su https://bugs.openjdk.java.net/browse/JDK-8196004

Probabilmente un giorno sarai in grado di farlo con:

`c:\afolder\afile`

AGGIORNAMENTO: JEP ha proposto di eliminare da JDK 12: 326: Raw String Literals (Preview) Puoi leggere la logica qui: http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

E maggiori dettagli qui https://bugs.openjdk.java.net/browse/JDK-8215682

In conclusione : non ci saranno stringhe verbatim in Java nel prossimo futuro. E anche se apparirà piuttosto non lo sarà ''.


1
Poiché questa è una delle discussioni più popolari in materia, JEP 326 è stato ritirato. La discussione è stata riavviata a gennaio 2019 e ora è tracciata in JEP 355 per una versione JDK13.
NPras
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.