Question

In C#, if you want a String to be taken literally, i.e. ignore escape characters, you can use:

string myString = @"sadasd/asdaljsdl";

However there is no equivalent in Java. Is there any reason Java has not included something similar?

Edit:

After reviewing some answers and thinking about it, what I'm really asking is:
Is there any compelling argument against adding this syntax to Java? Some negative to it, that I'm just not seeing?

Was it helpful?

Solution

Java has always struck me as a minimalist language - I would imagine that since verbatim strings are not a necessity (like properties for instance) they were not included.

For instance in C# there are many quick ways to do thing like properties:

public int Foo { get; set; }

and verbatim strings:

String bar = @"some
string";

Java tends to avoid as much syntax-sugar as possible. If you want getters and setters for a field you must do this:

private int foo;

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

and strings must be escaped:

String bar = "some\nstring";

I think it is because in a lot of ways C# and Java have different design goals. C# is rapidly developed with many features being constantly added but most of which tend to be syntax sugar. Java on the other hand is about simplicity and ease of understanding. A lot of the reasons that Java was created in the first place were reactions against C++'s complexity of syntax.

OTHER TIPS

I find it funny "why" questions. C# is a newer language, and tries to improve in what is seen as shortcomings in other languages such as Java. The simple reason for the "why" question is - the Java standard does not define the @ operator such as in C#.

Like said, mostly when you want to escape characters is for regexes. In that case use: Pattern.quote()

I think one of the reasons is that regular expressions (which are a major reason for these kind of String literals) where not part of the Java platform until Java 1.4 (if I remember correctly). There simply wasn't so much of a need for this, when the language was defined.

Java (unfortunately) doesn't have anything like this, but 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

I really liked this feature of C# back when I did some .NET work. It was especially helpful for cut and pasted SQL queries.

I am not sure on the why, but you can do it by escaping the escape character. Since all escape characters are preceded by a backslash, by inserting a double backslash you can effectively cancel the escape character. e.g. "\now" will produce a newline then the letters "ow" but "\now" will produce "\now"

I think this question is like: "Why java is not indentation-sensitive like Python?" Mentioned syntax is a sugar, but it is redundant (superfluous).

You should find your IDE handles the problem for you. If you are in the middle of a String and copy-paste raw text into it, it should escape the text for you.

PERL has a wider variety of ways to set String literals and sometimes wish Java supported these as well. ;)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top