如果字符串包含" \"则IndexOf返回-1。

时间:2018-03-19 04:36:04

标签: c# string indexof operation

我有string code= "\0\u0001\0\0\0????\u0001\0\0\0\0\0\0\0\u000f\u0001\0\0\0\u001f\u0001\\ABC01\0\0\0\u001f\0\0\0\u0002\DEF\01\0\0\0\u001f\0\0\0\u0003\\\GHI01\0\0\0\u001f\0\0\0"

我需要在u0001和u0002以及u0002和u0003等之间检索数据。

输出为:

  

ABC,DEF,GHI等。

我是如何努力实现它的:

code.Substring((code.IndexOf("\u000" + i) + ("\u000" + i).Length), code.IndexOf("\u000" + (i + 1)) - code.IndexOf("\u000" + i) - ("\u000" + i).Length));

这会导致编译错误:

  

无法识别的转义序列。

我已尝试code.IndexOf("\u0001"),但这不起作用code.IndexOf("\u000"+i)

如何解决?

编辑:你们中的许多人似乎都错了,所以这里是完整的代码:

private static List RetriveMethod()

    {            
         input="\u0001\0\u0005\0\0\0\u0001\0\0\0\tMyMethod1\u0001\u001cfunction MyMethod1("there cud be another function by name function here" ) {\n\t\n\n}\0\0\0\0\u0002\0\0\0\tMyMethod2\u0001?\u0001function MyMethod2( ) { }\0\0\0\0\u0003\0\0\0\tMyMethod3\u0001Ofunction MyMethod3( ) 

        List<string> ExtactedMethods = new List<string>();
        for (int i = 0; i <= 3; i++)
        {
            ExtactedMethods.Add(code.Substring((code.IndexOf("\u000" + i) + ("\u000" 
            + i).Length), code.IndexOf("\u000" + (i + 1)) - 
             code.IndexOf("\u000" + i) - ("\u000" + i).Length));
           }

        return ExtactedMethods;
    }

3 个答案:

答案 0 :(得分:2)

\u----表示Unicode字符(因此前缀为u)。 "\u000"是无效的Unicode字符,会导致编译错误。

如果您希望\u不被视为Unicode字符,则转义为\字符

"\\u"

@Immersive建议修复源字符串

中的\u
string code= @"\0\u0001\...."

详细了解verbatim string literals

答案 1 :(得分:0)

  

注意:code.IndexOf(“\ u000”+ i)不起作用,因为你无法将整数转换为字符串,而IndexOf所做的是找到字符串中该字符的数字位置,而应该尝试code.IndexOf(“\ u000”)+ i你在哪里这是向位置添加值的正确方法(IndexOf返回的值),如果这是你的目标

     

您不能使用反斜杠\,因为它是一个转义序列字符\ n \ r \ T,如果要应用它,你必须添加两个\\其中IDE会解释,首先是转义序列和第二个要读的字符

无论如何,我创建了这个方法来提取文本字符串的大写字母

public List<string> GetUpperLetters(string input)
        {
            List<string> result = new List<string>();
            int index_0 = 0;
            string accum = string.Empty;

            //Convert string input to char collection 
            //and walk it one by one
            foreach (char c in input.ToCharArray())
            {
                if(char.IsLetter(c) && char.IsUpper(c))
                {
                    accum += c;
                    index_0++;
                    if(index_0 == 3)
                    {
                        index_0 = 0;
                        result.Add(accum);
                        accum = string.Empty;
                    }
                }
            }

            return result;
        }

,其中

  

GetUpperLetters(code)[索引从零到n]

string code= "\0\u0001\0\0\0????\u0001\0\0\0\0\0\0\0\u000f\u0001\0\0\0\u001f\u0001\\ABC01\0\0\0\u001f\0\0\0\u0002\DEF\01\0\0\0\u001f\0\0\0\u0003\\\GHI01\0\0\0\u001f\0\0\0";

GetUpperLetters(code)[0] returns ABC
GetUpperLetters(code)[1] returns DEF
GetUpperLetters(code)[2] returns GHI

答案 2 :(得分:0)

非常感谢大家的建议答案。 @Immersive的那个人工作了! 要做的更改是字符串代码= @&#34; \ 0 \ u0001 \ 0 \ 0 \ 0 ???? \ u0001 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ u000f \ u0001 \ 0 \ 0 \ 0 \ u001f \ U0001 \ ABC01 \ 0 \ 0 \ 0 \ u001f \ 0 \ 0 \ 0 \ U0002 \ DEF \ 01 \ 0 \ 0 \ 0 \ u001f \ 0 \ 0 \ 0 \ U0003 \\ GHI01 \ 0 \ 0 \ 0 \ u001f \ 0 \ 0 \ 0&#34; 和

code.Substring((code.IndexOf(@&#34; \ u000&#34; + i)+(@&#34; \ u000&#34; + i).Length),code.IndexOf(@& #34; \ u000&#34; +(i + 1)) - code.IndexOf(@&#34; \ u000&#34; + i) - (@&#34; \ u000&#34; + i).Length ));