我不确定为什么会得到0
的结果,这是a
的正确值
我有VB
Dim searched As String = "<results>" & vbCrLf & "<field name=\""FID\""/>" & vbCrLf & "<field name=\""StartFID\""/>" & vbCrLf & "<field name=\""Vertex1\""/>" & vbCrLf & "<field name=\""Vertex2\""/>" & vbCrLf & "<field name=\""Slope\""/>" & vbCrLf & ""
Dim sought As String = "<rs FID=\""87\"" StartFID=\""87\"" Vertex1=\""29\"" Vertex2=\""30\"" Slope=\""-1\""/>"
Dim a As Integer = InStr(searched, sought)
我想做的是,在转换为c#时获得a == 0
的相同结果。
我试过了
int a = String.Compare(searched, sought);
int a = String.IndexOf(searched, sought);
int a = String.Equals(searched, sought);
答案 0 :(得分:3)
C#中的字符串是零索引的。如果a.IndexOf(b)
返回0
,则字符b
中的字符a
位于0
位置。
如果搜索的字符串不在输入中,IndexOf()
会返回-1
。
答案 1 :(得分:3)
InStr
和IndexOf
行为之间的一个区别是InStr
在找不到字符串时返回零,而IndexOf
返回-1。使用IndexOf
是在C#中搜索子字符串的惯用方法,以及在您的情况下使用的正确方法。
如果您想直接使用InStr
,可以通过引用Microsoft.VisualBasic
程序集,然后调用InStr
作为Strings
类的静态方法来执行此操作:
int a = Strings.InStr(searched, sought);
答案 2 :(得分:0)
String.IndexOf
应该有效,但如果您真的想使用InStr,您仍然可以使用它。只需添加对Microsoft.VisualBasic.dll的引用,并使用Microsoft.VisualBasic添加&#34;&#34;在文件顶部,您可以使用Strings.InStr
:
与Strings.InStr(searched, sought)
答案 3 :(得分:0)
您可以使用searched.Contains(sought)
答案 4 :(得分:0)
这三种方法都是出于不同目的而不尽相同。这就是为什么他们有不同的名字..
int a = String.IndexOf(searched, sought);
这是您应该使用的方法,并且正是出于此目的。
或者,您可以使用string.Contains()
。
int a = String.Compare(searched, sought);
比较两个指定的String对象,忽略或尊重它们的大小写,并返回一个整数,指示它们在排序顺序中的相对位置。
bool a = String.Equals(searched, sought);
确定两个字符串的相等性。
答案 5 :(得分:0)
作品......谢谢Carsten
int b = searched.IndexOf(sought);
b = 0
我看到我现在遇到的问题...当我将字符串移动到计算字符串的变量时,我得到了错误。我不确定我是否正确使用了InStr。
答案 6 :(得分:0)
只需使用IndexOf()+ 1即可返回0而不是-1
int a = searched.IndexOf(sought)+1;
对我有用,希望对您有帮助