2013-05-08 201 views
0

我有以下函数似乎工作。这是在设计代码:在字符串中查找字符串的第一个实例

Method findFirst(word As String) As Integer 

foundPosition As integer 
Set foundPosition To -1 
wordLen As integer 
Set wordLen To len(word) 
startingPoint As integer 
Set startingPoint To (len(Text)- 1) - wordLen 
For iPosition As integer From startingPoint To 0 Step -1 
     If substring(iPosition, wordLen) = word Then 
      foundPosition = iPosition 
     End If  
    Next iPosition 
Return foundPosition 

End Method 

VB.NET实现我有以下几点:

Public Function findFirst(word As String) As Integer 

    Dim foundPosition As Integer = -1 
    Dim wordLen As Integer = word.Length 
    Dim startingPoint As Integer = (fText.Length - 1) - wordLen 

    For iPosition As Integer = startingPoint To 0 Step -1 
     If fText.Substring(iPosition, wordLen) = word Then 
      foundPosition = iPosition 
     End If 
    Next iPosition 

    Return foundPosition 

End Function 

它返回现场用FText内的参数的位置。
这是一个有效的方法吗?
它容易破裂吗?
有更好的解决方案吗?

+5

[''String.IndexOf'](http://msdn.microsoft.com/en-us/library/system.string.indexof.aspx)? – 2013-05-08 07:27:59

+1

如果你必须重新实现它,在另一个方向运行循环(从0到'startingPoint',你可能要重新命名),并改变'foundPosition = iPosition'到'返回iPosition' – 2013-05-08 07:31:30

+0

@Damien_The_Unbeliever你的第二个评论是我之后的信息片断....有一种感觉,我错过了一些明显的东西。 – whytheq 2013-05-08 11:46:19

回答

2

这是一个有效的方法吗?

是的,它是一个有效的approuch,但它不是完成任务的可行途径。顺便说一下这种approuch肯定会改善你的logical skills

有没有更好的办法呢?

建在function调用IndexOf可用于简单地实现您的任务。如果可用,它将返回string中特定文本的index。否则它会简单的返回-1

附加信息:

即使你开始搜索字符串用FText结束的话,你的代码将返回这样做,它的第一occurance.Instead的指数你可以从一开始就像我给出的代码一样开始你的循环。顺便说一下,您应该使用Exit For/Return来打破for循环中匹配if语句结尾处的for循环。

For iPosition As Integer = 0 To len(Text) 
     If fText.Substring(iPosition, wordLen) = word Then 
      Return iPosition 
     End If 
Next iPosition 
Return -1 
+0

...我的方法叫做FindFirst,因为我想查找_first_实例。你的脚本可以工作,但我需要去掉'Step-1',然后我相信Damien在OP注释部分的建议比使用Exit For更加优雅。也许你可以编辑你的文章,以便它成为答案? – whytheq 2013-05-08 11:48:41

+0

@whytheq哦,我只是觉得你正在寻找该字符串的最后一个索引。现在我只是根据您的要求修改代码和解释。 – 2013-05-08 12:17:23

+0

谢谢Raju:我已经测试过,并且似乎在'For'中只有一个-1就可以正常工作。再次感谢您的努力。 – whytheq 2013-05-09 06:35:29

3

你可能只想使用内置的字符串的方法IndexOf

+0

+1感谢 - 更多的信息re.'通常有一种更快的方式 – whytheq 2013-05-08 11:46:50

1

有一个已经实现的功能做在.NET中,试试这个:

​​

如果你想最后的外观:

index = fText.LastIndexOf(word) 
+0

+1 LastIndexOf' – whytheq 2013-05-08 11:47:29