2009-03-08 13 views
6

In C#, se si vuole una stringa per essere preso alla lettera, cioè ignorare caratteri di escape, si può usare:Perché Java non ha un modo per specificare valori letterali stringa senza caratteri di escape?

string myString = @"sadasd/asdaljsdl"; 

Tuttavia non esiste un equivalente in Java. C'è qualche ragione per cui Java non ha incluso qualcosa di simile?

Edit:

Dopo aver esaminato alcune risposte e pensarci, quello che sto veramente chiedendo è:
C'è qualche argomento convincente contro l'aggiunta di questa sintassi per Java? Qualche cosa negativa, che non vedo?

risposta

5

Java mi ha sempre colpito come un linguaggio minimalista - immagino che poiché le stringhe testuali non sono una necessità (come le proprietà per esempio) non sono state incluse.

Per esempio in C# ci sono molti modi veloci per fare cosa come proprietà:

public int Foo { get; set; } 

e testuale delle stringhe:

String bar = @"some 
string"; 

Java tende ad evitare il più sintassi di zucchero possibile. Se si desidera getter e setter per un campo è necessario farlo:

private int foo; 

public int getFoo() { return this.foo; } 
public int setFoo(int foo) { this.foo = foo; } 

e archi deve essere sfuggito:

String bar = "some\nstring"; 

penso che sia perché in un sacco di modi C# e Java hanno design diverso obiettivi. C# si sviluppa rapidamente con molte funzioni costantemente aggiunte, ma la maggior parte delle quali tende ad essere zucchero sintattico. D'altra parte Java riguarda semplicità e facilità di comprensione. Molti dei motivi per cui Java è stato creato in primo luogo sono state le reazioni alla complessità della sintassi di C++.

+1

Java 7 avrà anche proprietà :) –

+1

È un po 'difficile caratterizzare un linguaggio in cui è possibile scrivere "nuovo HashMap

+4

Heh, Java è solo "minimalista" in un senso molto specifico. Capisco cosa intendi, e sono d'accordo. Ma allo stesso tempo, è anche un linguaggio incredibilmente grande e gonfio, che cerca di essere tutto per tutti. :) Ma sì, sembra che a Java non piaccia le scorciatoie. – jalf

2

Trovo divertente "perché" domande. C# è un linguaggio più recente e cerca di migliorare ciò che è visto come un difetto in altri linguaggi come Java. La semplice ragione per la domanda "perché" è - lo standard Java non definisce l'operatore @ come in C#.

+0

Solo un pisolino: @ non è un operatore. È solo una parte della sintassi per una stringa letterale letterale. –

+0

Grazie per il chiarimento, Jon. –

+0

C++ è ancora più vecchio di Java ma supporta la stringa raw letterale molto tempo fa. Anche le specifiche Java sono aggiornate ma è ancora lontana dalle altre lingue anche dopo gli aggiornamenti –

0

Penso che questa domanda sia: "Perché java non è sensibile all'indentazione come Python?" La sintassi menzionata è uno zucchero, ma è ridondante (superfluo).

+0

non solo zucchero ma migliora anche notevolmente la leggibilità –

1

Penso che uno dei motivi è che le espressioni regolari (che sono una delle ragioni principali per questo tipo di letterali String) dove non fanno parte della piattaforma Java fino a Java 1.4 (se non ricordo male). Semplicemente non c'era tanto bisogno di questo, quando la lingua veniva definita.

+0

OTOH, l'SQL in linea era più comune nei tempi passati. –

+0

@ Tom: sì, ma gli attacchi di SQL injection non erano in cima alla lista delle priorità ;-) PreparedStatements non ha problemi con l'escape. –

0

Non sono sicuro del perché, ma puoi farlo sfuggendo al personaggio di escape. Poiché tutti i caratteri di escape sono preceduti da una barra rovesciata, inserendo una doppia barra rovesciata è possibile annullare in modo efficace il carattere di escape. per esempio. "\ now" produrrà una nuova riga quindi le lettere "ow" ma "\ now" produrrà "\ now"

+0

Hai letto la domanda? –

0

Dovresti trovare il tuo IDE che gestisce il problema per te. Se ci si trova nel mezzo di una stringa e si copia e incolla il testo non elaborato, dovrebbe sfuggire al testo.

PERL ha una più ampia varietà di modi per impostare stringhe letterali e, a volte, desiderano che Java supporti anche questi.;)

+1

Off-topic: è Perl, non PERL. – nxadm

2

Come detto, soprattutto quando si desidera sfuggire ai caratteri è per le espressioni regolari. In tal caso l'uso: Pattern.quote()

1

Java (purtroppo) non ha nulla di simile, ma Groovy does:

assert '''hello, 
world''' == 'hello,\nworld' 
//triple-quotes for multi-line strings, adds '\n' regardless of host system 
assert 'hello, \ 
world' == 'hello, world' //backslash joins lines within string 

Mi è piaciuto molto questa caratteristica del C# indietro quando ho fatto un po 'di lavoro .NET. È stato particolarmente utile per le query SQL tagliate e incollate.

+0

Questo è quello che stavo cercando. Ma l'OP chiede dei personaggi di fuga; Groovy ignora quelli con stringhe slashy, non citazioni triple. – Noumenon

Problemi correlati