none
vs2003中和vs2005中的String.IndexOf()不等同 RRS feed

  • 问题


  • string s1="TEST\0";
    string s2="TEST";
    string s3="ATEST";
    string s4="ATESTB";
    //VS03结果
    s2.IndexOf(s1);//0
    s3.IndexOf(s1);//1
    s4.IndexOf(s1);//-1
    //VS05结果
    s2.IndexOf(s1);//-1
    s3.IndexOf(s1);//-1
    s4.IndexOf(s1);//-1

    我现在有个项目需要将VS2003的转为VS2005的但是就发现这个问题了。
    各位有什么方法在vs2003转化到vs2005可以解决这个问题?

     

    2008年5月24日 5:11

答案

  • 可能在.net 1.1\0是被作为特殊符号处理的,而在.net2.0开始将\0作为字符来处理的。所以就会导致字符串比对结果的变换。从您的代码来看,您的目的是要求找到以TEST结尾的字符串中,TESTindex,建议您可以分两步来做,首先看看字符是否是以TEST结尾,然后再返回index,如

     

    Code Snippet

            static void Main(string[] args)

            {

                string s1 = "TEST\0";

                string s2 = "TEST"; 

                GetIndex(s1, s2);

            } 

            static int GetIndex(string s1, string s2)

            {

                if(s2.EndsWith(s1)

                    return s2.IndexOf(s1);

                else

                    return -1;

            }

     

     

     

    希望对您有所帮助。

    王文渊

    2008年5月29日 7:17

全部回复

  • 可能在.net 1.1\0是被作为特殊符号处理的,而在.net2.0开始将\0作为字符来处理的。所以就会导致字符串比对结果的变换。从您的代码来看,您的目的是要求找到以TEST结尾的字符串中,TESTindex,建议您可以分两步来做,首先看看字符是否是以TEST结尾,然后再返回index,如

     

    Code Snippet

            static void Main(string[] args)

            {

                string s1 = "TEST\0";

                string s2 = "TEST"; 

                GetIndex(s1, s2);

            } 

            static int GetIndex(string s1, string s2)

            {

                if(s2.EndsWith(s1)

                    return s2.IndexOf(s1);

                else

                    return -1;

            }

     

     

     

    希望对您有所帮助。

    王文渊

    2008年5月29日 7:17
  •  

    谢谢!

    但是我现在主要的问题是因为现在想将1.1的项目转为2.0的项目,在项目中有很多地方都是对二进制文本进行的处理,现在转到2.0就发现这个问题了。IndexOf这个方法分散在程序的各个地方,如果要一处一处的更改对文本的处理的的话会很麻烦,有没有什么其他的好方法处理呢?

    2008年6月3日 3:15