I am sent an XML string that I'm trying to parse via an XmlReader and I'm trying to strip out the \" characters.
I've tried
.Replace(#"\", "")
.Replace("\\''", "''")
.Replace("\\''", "\"")
plus several other ways.
Any ideas?
Were you trying it like this:
string text = GetTextFromSomewhere();
text.Replace("\\", "");
text.Replace("\"", "");
? If so, that's the problem - Replace doesn't change the original string, it returns a new string with the replacement performed... so you'd want:
string text = GetTextFromSomewhere();
text = text.Replace("\\", "").Replace("\"", "");
Note that this will replace each backslash and each double-quote character; if you only wanted to replace the pair "backslash followed by double-quote" you'd just use:
string text = GetTextFromSomewhere();
text = text.Replace("\\\"", "");
(As mentioned in the comments, this is because strings are immutable in .NET - once you've got a string object somehow, that string will always have the same contents. You can assign a reference to a different string to a variable of course, but that's not actually changing the contents of the existing string.)
In .NET Framework 4 and MVC this is the only representation that worked:
Replace(#"""","")
Using a backslash in whatever combination did not work...
Try it like this:
Replace("\\\"","");
This will replace occurrences of \" with empty string.
Ex:
string t = "\\\"the dog is my friend\\\"";
t = t.Replace("\\\"","");
This will result in:
the dog is my friend
\ => \\ and " => \"
so Replace("\\\"","")
Where do these characters occur? Do you see them if you examine the XML data in, say, notepad? Or do you see them when examining the XML data in the debugger. If it is the latter, they are only escape characters for the " characters, and so part of the actual XML data.
Replace(#"\""", "")
You have to use double-doublequotes to escape double-quotes within a verbatim string.
Related
I would like to read a line from a file, and use that line as the format specifier for a string.
The line in the file contains a newline character escape sequence \n. so it may look like this:
Hello{0}\n\nWelcome to the programme
And I want to use it in a situation like this:
string name_var = "Steve";
string line = ReadLineFromFile();
string formatted_line = String.Format(line, name_var);
Unfortunately, the result looks like:
Hi Steve\n\nWelcome to the programme
Whereas I'd like it to look like:
Hi Steve
Welcome to the programme
Any ideas?
When you use escape sequences such as \n in your C# program, the compiler processes the string, and inserts the code of the corresponding non-printable character into the string literal for you.
When you read a line from a file or from another import source, processing of escape sequences becomes your program's responsibility. There is no built-in way of doing it. If all you want is \n, you could use a simplistic
formatString = formatString.Replace("\\n", "\n");
If you would like to support other escape sequences, such as ones for UNICODE characters, you could use solutions from answers to this question.
Replace the \n in your string with the newline specifier like this:
string name_var = "Steve";
string line = ReadLineFromFile();
line = line.Replace("\\n", Environment.NewLine);
string formatted_line = String.Format(line, name_var);
I have a string:
var a = "some text \"";
I want to replace \" with ".
a.Replace("\"", '"'); => The best overloaded method match for 'string.Replace(string, string)' has some invalid arguments
a.Replace("\"", """); => Newline in constant
finally I want to obtain "some text"
You need to escape your string, you are looking for:
a.Replace("\\\"", "\"");
That should do it!
NOTE
Please note - just calling replace creates a NEW STRING VALUE it does not edit the original string. If you want to use this string you can do the replace inline or you can assign back to the original value like so:
a = a.Replace("\\\"", "\"");
That could also be another issue you are having!
You seem to be confused by C#'s escaping rules. The literal "some text \"" has the value some text ". If you look at this string in the VS debugger, it will show the C# literal that produces the value: "some text \"". If you print it, you'll see its value is actually some text ".
If the value is actually some text \", which could be represented by "some text \\\"" or #"some text \""", then what you really want is this:
var b = a.Replace("\\\"", "\"");
I suspect that your string is actually already what you want, though: some text "
You can use verbatim strings introduced with #. In verbatim strings double quotes are escaped by doubling them and the backslashes don't work as escape characters any more:
string result = a.Replace(#"\""", #"""");
Compared to normal strings, you still have to escape the double quote ("), but not the backslash (\).
Of course you can combine both solutions:
string result = a.Replace(#"\""", "\"");
See also: What character escape sequences are available?
'\' This will treated as escape character in C# you need to use double quote to replace it with.
see below snippet
string afterreplace = txtBox1.Text.Replace("\\\"", "\"");
You need some escaping! Use this:
a.Replace("\\\"", "\"");
I'm trying to get messages from Gmail in C#
but the message body comes like this "\r\n\r\nBODY\r\n\r\n"
How can I get the "BODY" out of the string ?
I tried to loop through it but I found out that when looping the "\r" becomes a " "
You can use String.Trim() to remove all leading and trailing whitespace form a given string. Something like this:
var body = inputString.Trim();
This would cover /r/n characters, as well as any other whitespace.
try this:
string after = text.Replace(Environment.NewLine, "");
body = body.Replace("\r\n", string.Empty);
When a user writes some text in a file, the Editor automatically appends CR|LF after each line.
CR or Carriage Return is denoted as \r
LF or Line Feed is denoted as \n
These are normally invisible to us, but while reading a text file using some code process it also captures these escape sequences.
To avoid these character you can easily replace them using builtin C# function Replace method
You can use following code to get rid from \r and \n
str = str.Replace("\r\n","");
This will first find out all combined \r\n characters and then replaces this string with "" (Blank string).
This works for me:
string result= rawString.Replace(#"\r\n", " ").Trim().Replace(Environment.NewLine, " ").Replace("\n", " ");
Please forgive me a beginner's question :)
string S="abc";
S+="\";
won't complile.
string S="abc";
S+="\\";
will make S="abc\\"
How can I make S="abc\" ?
Your second piece of code is what you want (or a verbatim string literal #"\" as others have suggested), and it only adds a single backslash - print it to the console and you'll see that.
These two pieces of code:
S += "\\";
and
S += #"\";
are exactly equivalent. In both cases, a single backslash is appended1.
I suspect you're getting confused by the debugger view, which escapes backslashes (and some other characters). You can validate that even with the debugger by looking at S.Length, which you'll see is 4 rather than 5.
1 Note that it doesn't change the data in the existing string, but it sets the value of S to refer to a new string which consists of the original with a backslash on the end. String objects in .NET are immutable - but that's a whole other topic...
Try this:
String S = "abc";
S += #"\";
# = verbatim string literal
http://msdn.microsoft.com/en-us/library/aa691090%28v=vs.71%29.aspx
http://msdn.microsoft.com/en-us/library/vstudio/362314fe.aspx
string S = "abs" + "\\";
Should and does result in abc\.
What you are probably seeing is the way the debugger/intellisense visualizes the string for you.
Try printing your string to the console or display it in a textbox.
You already have the solution. The reason it appears as abc\\ whilst debugging is because VS will escape backslashes, print the value of S to a console window and you'll see abc\.
You could add an # to the start of the string literal, e.g.
string S="abc";
S+= #"\";
Which will achieve the same thing.
You can escape the backslash with the # character:
string S="abc";
S += #"\";
But this accomplishes exactly what you've written in your second example. The confusion on this is stemming from the fact that the Visual Studio debugger continues to escape these characters, even though your source string will contain only a single backslash.
Your second example is perfectly fine
string S="abc";
S+="\\";
Visual studio displays string escaped, that's why you see two slashes in result string. If you don't want to use escaping declare string like this
#"\"
This is not compiling because compiler is expecting a character after escape symbol
string S="abc";
S+="\";
string S="abc";
S+="\\";
Console.WriteLine(S); // This is what you're missing ;)
You'll see your string is not wrong at all.
The backslash (\) is an escape character, and allows you to get special characters that you wouldn't normally be able to insert in a string, such as "\r\n", which represents a NewLine character, or "\"" which basically gives you a " character.
In order to get the \ character, you need to input "\\" which is exactly what you're doing and also what you want.
Using the verbatim (#) replaces all occurrences of \ into \\, so #"\" == "\\". This is usually used for paths and regexes, where literal \ are needed in great numbers. Saying #"C:\MyDirectory\MyFile" is more comfortable than "C:\\MyDirectory\\MyFile" after all.
Try this
string s="abc";
s = s+"\\";
Given the string "a|bc\de,fg~h,ijk,lm|no\p" what is the best way to add a '\' before the '|' ',' '~' and '\'
So the end string would be "a\|bc\de\,fg\~h\,ijk\,lm\|no\p"
What is the best way to do this?
I need this in c#.
Then i also need a way to get this string in JavaScript and remove all extra backslashes.
Thank you in advance.
EDIT
Can any one help me the the javacsript function that will give me back the original string, take off the extra \?
Regex would be overkill. Use String.Replace Method (String, String):
string myString = #"a|bc\de,fg~h,ijk,lm|no\p";
myString = myString.Replace("|", "\\|").Replace(",", "\\,").Replace("~", "\\~").Replace("\\", "\\\\");
This produces "a\|bc\\de\,fg\~h\,ijk\,lm\|no\\p"
There's probably more than one way to get the string out for JavaScript. It will depend on where you're generating the string. For illustration purposes, say you're generating the string in the code behind and putting it in some control (like a hidden field, perhaps) on the client.
In the client you would get the string and use the Javascript String.Replace method, something like this, assuming str1 is "a\|bc\\de\,fg\~h\,ijk\,lm\|no\\p":
str1 = str1.Replace("\,", ",");
str1 = str1.Replace("\|", ",");
str1 = str1.Replace("\\", "\");
It's been a while since I've done JavaScript, so you may need to escape the backslash with another backslash (like \\).
If you need to escape only Regex system characters, you can use the method Escape like that:
String str1= Regex.Escape("your string with \ - +");
No need to escape all and every character individually, put # before the string, for example:
string String = #"a|bc\de,fg~h,ijk,lm|no\p";