In Java, why does System.out.println("\" \\"); gives " \ as output - java

In Java when i run System.out.println("\" \\");
I get output as :
" \
Can you please explain in detail, why this is happening?

Because you escape double quotes ("") with a backslash (\) and also a backslash with a backslash.

backslash is a special character in JAVA and many other programming languages, one of its use is to escape characters in certain situation.
For example:
If you want to print a string containing double quotes like: How are you "Bob" ?
Printing this using System.out.println("How are you "Bob" ?"); will not work because you are closing the quotes just before the word Bob. Therefore, a character was used to deal with such situation so one can print double quotes inside a string:
System.out.println("How are you \"Bob\" ?");
Moreover, since we've agreed above that \ escapes the double quotes, if you want to print a single backslash inside a string, doing this System.out.println("\"); will open the string but will escape the second double quotes which will result in an error because the string was not closed. To fix this, you need to escape the backslash like this: System.out.println("\");
Other interesting uses of \:
\n character to return to a new line
\t character to insert a tab
More about escape character can be found on Wikipedia

System.out.println("\" \");
System.out.println(" --> String Open
\" --> Double Quote character escaped using backslash
\\ --> Backslash itself as a character escaped using backslash
"); --> String Close
will give you output as "\
For the list of escaped characters, You can find that here.
\t Insert a tab in the text at this point.
\b Insert a backspace in the text at this point.
\n Insert a newline in the text at this point.
\r Insert a carriage return in the text at this point.
\f Insert a formfeed in the text at this point.
\' Insert a single quote character in the text at this point.
\" Insert a double quote character in the text at this point.
\\ Insert a backslash character in the text at this point.

Yes. You are escaping two characters,
String s = "\" \\";
uses the single back-slash to escape first the double quote and then a backslash. So you get,
" \
You might also try
System.out.println(s.length());
Which would tell you "3". Because you have a String of '"', ' ' and '\'
Escape Sequences are explained in The Java Tutorial: Characters, which also allows Unicode characters,
System.out.println("\u03A9");
Will output a one character String that equals
Ω

In addition to comments of my precursors, you can check it in Oracle's Java Tutorial, list of escape sequences.
http://docs.oracle.com/javase/tutorial/java/data/characters.html

This is because when you put a \ before a special character in java, \ tells the JVM that it is not a special character, rather it is a part of a String.
So in your case, when you put a \ before " , it prints a double quote(") and when you again put \\ , it prints a slash (\).
If you want to know more about this, you can go through the inside of Java and how the special characters are handled in java.
Hope it helps.

These are called escape sequences. All the escape sequences start with \ (backward slash) character (e.g., \n, \t etc.,). Here \n, \t has special meaning to Java like line break and tab space respectively. Similarly " (double quote) has a special meaning saying that termination of string literals in Java. Instead of making " as a string literal terminator, we need to tell java compiler to treat it as a special sequence. Hence we use these escape sequences like \\ (for backward slash), \' (single quote), \r (carriage return) etc.,
Thanks,
JK

The standard definition according to oracle is as follows:
A character preceded by a backslash \ is an escape sequence and has special meaning to the compiler.The following table shows the Java escape sequences
EscapeSequence Description
\" Insert a double quote character in the text at this point.
\\ Insert a backslash character in the text at this point.
By following the above description in our case for System.out.println("\" \\"),
\" would be replaced with a double " quote character and
\\ would be replaced with a (single backslash) \ character.
Hence output printed will be " \
Hope this helps.

Related

How do I print \\ in java without one becoming an escape sequence character?

In IntelliJ, my code is something like this,
String m = "\\Hello";
System.out.println(m);
I want to print 2 backslashes but one always becomes an escape sequence. When I add another backslash (total 3 backslashes) it gives me an error "java: illegal escape character"
Escaping characters is accomplished using a special symbol: \. In Java, a backslash combined with a character to be "escaped" is called a control sequence.
List of escaped characters:
\t - tab.
\b - backspace (a step backward in the text or deletion of a single character).
\n - new line.
\r - carriage return. ()
\f - form feed.
\' single quote.
\" double quote.
\\ backslash.
So if you want a single backslash \, you need to escape it like \\. So two backlashes would look like \\\\.
What does your error mean?
When you have a string like: "\\\hello", breaking it down, it means \\, \h, e, l, l, o.
\h is an not a valid escaped character. Which is why your error says java: illegal escape character.
If you want one \ you have to type \\. If you want two \\ repeat it two times ;)
String m = "\\\\Hello";
System.out.println(m);
Try to store 4 backslashes in the string variable
String m = "\\\\Hello"; System.out.println(m);

How to escape + character in java?

How to escape + character while using split function call in java?
split declaration
String[] split(String regularExpression)
thats what i did
services.split("+"); //says dongling metacharacter
services.split("\+"); //illegal escape character in string literal
But it allows to do something like this
String regExpr="+";
Since the + is a regex meta-character (denoting an occurrence of 1 or more times), you will have to escape it with \ (which also has to be escaped because it's a meta-character that's being used when describing the tab character, the new line character(s) \r\n and others), so you have to do:
services.split("\\+");
Java and Regex both have special escape sequences, and both of them begin with \.
Your issue lies in writing a string literal in Java. Java's escape sequences are resolved at compile time, long before the string is passed into your Regex engine for parsing.
The sequence "\+" would throw an error as this is not a valid Java string.
If you want to pass \+ into your Regex engine you have to explicitly let Java know you want to pass in a backslash character using "\\+".
All valid Java escape sequences are as follows:
\t Insert a tab in the text at this point.
\b Insert a backspace in the text at this point.
\n Insert a newline in the text at this point.
\r Insert a carriage return in the text at this point.
\f Insert a formfeed in the text at this point.
\' Insert a single quote character in the text at this point.
\" Insert a double quote character in the text at this point.
\\ Insert a backslash character in the text at this point.
should be like this :
services.split("\\+");

How to split a string with double quotes " as the delimiter?

I tried splitting like this-
tableData.split("\\"")
but it does not work.
It seems that you tried to escape it same way as you would escape | which is "\\|". But difference between | and " is that
| is metacharacter in regex engine (it represents OR operator)
" is metacharacter in Java language in string literal (it represents start/end of the string)
To escape any String metacharacter (like ") you need to place before it other String metacharacter responsible for escaping which is \1. So to create String which would contain " like this is "quote" you would need to write it as
String s = "this is \"quote\"";
// ^^ ^^ these represent " literal, not end of string
Same idea is applied if we would like to create \ literal (we would need to escape it by placing another \ before it). For instance if we would want to create string representing c:\foo\bar we would need to write it as
String s = "c:\\foo\\bar";
// ^^ ^^ these will represent \ literal
So as you see \ is used to escape metacharacters (make them simple literals).
This character is used in Java language for Strings, but it also is used in regex engine to escape its metacharacters:
\, ^, $, ., |, ?, *, +, (, ), [, {.
If you would like to create regex which will match [ character you will need to use regex \[ but String representing this regex in Java needs to be written as
String leftBracketRegex = "\\[";
// ^^ - Remember what was said earlier?
// To create \ literal in String we need to escape it
So to split on [ we would need to invoke split("\\[") because regex representing [ is \[ which needs to be written as "\\[" in Java.
Since " is not special character in regex but it is special in String we need to escape it only in string literal by writing it as
split("\"");
1) \ is also used to create other characters line separators \n, tab \t. It can also be used to create Unicode characters like \uXXXX where XXXX is index of character in Unicode table in hexadecimal form.
You have escaped the \ by putting in \ twice, try
tableData.split("\"")
Why does this happen?
A backslash escapes the following character. Since the next character is another backslash, the second backslash will be escaped, thus the doublequote won't.
Your resulting escaped string is \", where it should really be just ".
Edit:
Also keep in mind, that String.split() interprets its pattern parameter as a regular expression, which has several special characters, which have to be escaped in the resulting string.
So if you want split by a .(which is a special regex character), you need to specify it as String.split("\\."). The first backslash escapes the escaping function of the second backlash and would result in "\.".
In case of regex characters you could also just use Pattern.quote(); to escape your desired delimiter, but this is far out of the scope the question orignally had.
Try with single backslash \
tableData.split("\"")
Try like this by escaping " with single backslash \ :
tableData.split("\"")
You are not escaping properly. The snippet code will not even compile because of it. The correct way to do it is
tableData.split("\"");
A single backslash will do the trick.
Like this:
tableData.split("\"");
You can actually split without the backward slash. You only have to use single quote
tableData.split('"');

java regex expression escape characters

Hi i'm trying to split a string separated by vertical bars. for example:
String str = "a=1|b=2";
In java, we should do like this:
str.split("\\|");
If I use a single slash:
str.split("\|");
compiler gives errors:
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )
Can anyone explain me why this happens? thanks!
Backslash \ is a special character. In the Java world it is used to escape a character.
The pipe | is a special character in the Regex world, which means "OR".
To use the pipe as a separator you need to escape it(so it can be recognized during the regex parsing), so you need to get this in your regex: \|.
But as backshlash is a special character in Java and that you are using a String object, you have to escape the backslash so it can be interpreted as the final expected final result: \|
To do so, you simply escape backslash with another backslash: \\|
The first backslash escapes the second backslash (java requirement) which escapes the pipe (regex requirement).
In Java strings, a backslash needs to be escaped with another backslash. So, while the "canonical" form of the regex is indeed \|, as a Java string, this must be written "\\|".

Invalid Escape Sequence in Java

When I create this String:
private String chars = " `~1!2#3#4$5%6^7&8*9(0)-_=+qQwWeErRtTyYuUiIoOpP[{]}\|aAsSdDfFgGhHjJkKlL;:'"zZxXcCvVbBnNmM,<.>/?";
Eclipse tells me:
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
How do I fix this?
The \ is an escape character. You're basically escaping | which doesn't need to be escaped at all. If you want to represent an \ in String, then you need to let it escape itself.
private String chars = " `~1!2#3#4$5%6^7&8*9(0)-_=+qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:'\"zZxXcCvVbBnNmM,<.>/?";
Please note that the " does need to be escaped, otherwise the string value ends too early and the code still won't compile due to all the odd characters thereafter.

Categories

Resources