2017-05-29 91 views
-1

我正在开发函数,它会给我特定字符串的右侧。函数有可能根据splitted char返回字符串,将char保留在字符串中,而且最重要的是要么返回字符串将在该char分隔符的最后一次出现之后或者说在字符串中的分隔符occerence的哪个位置之后,返回字符串后采取。任何人都可以看看,并确认是否正确的方式去或该代码是否包含任何问题?按特定要求取字符串的特定字符串部分

请记住使用lastindex我将lastindexof设置为true,并且当splitterCharPosition必须设置时,splitterCharPosition是什么,反之亦然。

这是我当前的代码,以确认:

Public Function GetRightSideStringByCHar(splitterChar As String, searchingWord As String, keepCharAsWell As Boolean, lastindexof As Boolean, splitterCharPosition As Integer) As String 
     Dim index As Integer 
     Select Case lastindexof 
      Case False 
       index = GetNthIndex(searchingWord, splitterChar, splitterCharPosition) 
      Case True 
       index = searchingWord.LastIndexOf(splitterChar) 
     End Select 

     If index > 0 Then 
      If keepCharAsWell Then 
       searchingWord = searchingWord.Substring(0, index + splitterChar.Length) 
      Else 
       searchingWord = searchingWord.Substring(0, index) 
      End If 
     Else 
      searchingWord = String.Empty 
     End If 
     Return searchingWord 
    End Function 

Helper功能,将得到n个指标:根据您的其他问题,删除

Public Function GetNthIndex(searchingWord As String, charseparator As Char, n As Integer) As Integer 
     Dim count As Integer = 0 
     For i As Integer = 0 To searchingWord.Length - 1 
      If searchingWord(i) = charseparator Then 
       count += 1 
       If count = n Then 
        Return i 
       End If 
      End If 
     Next 
     Return -1 
    End Function 
+0

你究竟在问什么?你是否运行这段代码?它工作吗?如果你要求审查,那么你可以尝试在https://codereview.stackexchange.com/上提出这个问题。 –

回答

0

,我制定了这个要求。

它适用于您以前的所有示例。

[parameters] 
str = input string 
strtofind = separator string 
occurance = zero-based index to start cutting (optional) 
keepstringtofind = append separator to string (optional) 
righttoleft = operational direction (optional) 

    Public Function CutFromString(str As String, strtofind As String, Optional occurance As Integer = 0, Optional keepstrtofind As Boolean = False, Optional righttoleft As Boolean = False) As String 
    Dim s As String = str 
    Dim sections As List(Of String) = IIf(String.IsNullOrEmpty(str), New List(Of String), str.Split(strtofind.ToCharArray).ToList) 
    If sections.Count = 1 AndAlso sections.First = str Then sections.Clear() 
    If occurance < sections.Count Then 
     Dim b = sections.Count - occurance 
     While b > 0 
      If righttoleft Then 
       sections.RemoveAt(0) 
      Else 
       sections.RemoveAt(sections.Count - 1) 
      End If 
      b -= 1 
     End While 
     s = Join(sections.ToArray, strtofind) 
     If keepstrtofind And occurance > 0 Then 
      If righttoleft Then 
       s = strtofind + s 
      Else 
       s += strtofind 
      End If 
     End If 
    End If 
    Return s 
End Function 
+0

似乎不适用于所有情况。对于这个例子:Console.WriteLine(CutFromString(“1 34.1t0#$ 1.trweL24w222”,“。”,1,True,True))仍然没有点在开始我标记保持或这个例子:CutFromString(“14.1001.2 “,”。“,1,True,True)应该是:14.1001。我得到:2 – DinoDinn

+0

修复了一些错误,试试这个版本 – Mike