Can I convert a C# string value to an escaped string literal

后端 未结 16 1082
时光取名叫无心
时光取名叫无心 2020-11-22 07:51

In C#, can I convert a string value to a string literal, the way I would see it in code? I would like to replace tabs, newlines, etc. with their escape sequences.

If

16条回答
  •  闹比i
    闹比i (楼主)
    2020-11-22 08:23

    EDIT: A more structured approach, including all escape sequences for strings and chars.
    Doesn't replace unicode characters with their literal equivalent. Doesn't cook eggs, either.

    public class ReplaceString
    {
        static readonly IDictionary m_replaceDict 
            = new Dictionary();
    
        const string ms_regexEscapes = @"[\a\b\f\n\r\t\v\\""]";
    
        public static string StringLiteral(string i_string)
        {
            return Regex.Replace(i_string, ms_regexEscapes, match);
        }
    
        public static string CharLiteral(char c)
        {
            return c == '\'' ? @"'\''" : string.Format("'{0}'", c);
        }
    
        private static string match(Match m)
        {
            string match = m.ToString();
            if (m_replaceDict.ContainsKey(match))
            {
                return m_replaceDict[match];
            }
    
            throw new NotSupportedException();
        }
    
        static ReplaceString()
        {
            m_replaceDict.Add("\a", @"\a");
            m_replaceDict.Add("\b", @"\b");
            m_replaceDict.Add("\f", @"\f");
            m_replaceDict.Add("\n", @"\n");
            m_replaceDict.Add("\r", @"\r");
            m_replaceDict.Add("\t", @"\t");
            m_replaceDict.Add("\v", @"\v");
    
            m_replaceDict.Add("\\", @"\\");
            m_replaceDict.Add("\0", @"\0");
    
            //The SO parser gets fooled by the verbatim version 
            //of the string to replace - @"\"""
            //so use the 'regular' version
            m_replaceDict.Add("\"", "\\\""); 
        }
    
        static void Main(string[] args){
    
            string s = "here's a \"\n\tstring\" to test";
            Console.WriteLine(ReplaceString.StringLiteral(s));
            Console.WriteLine(ReplaceString.CharLiteral('c'));
            Console.WriteLine(ReplaceString.CharLiteral('\''));
    
        }
    }
    

提交回复
热议问题