建议改进VB.NET URL缩短器?

时间:2008-10-22 20:32:00

标签: vb.net url function

这是我的功能(已更新):

Public Shared Function shortenUrl(ByVal URL As String) As String
    Return shortenUrl(URL, 32)
End Function
Public Shared Function shortenUrl(ByVal URL As String, ByVal maxLength As Integer) As String
    If URL.Length > maxLength Then
        String.Format("{0}...{1}", URL.Substring(0, (maxLength / 2)), URL.Substring(URL.Length - ((maxLength / 2) - 3)))
    Else
        Return URL
    End If
End Function

我修复了它没有返回maxLength个字符的问题,因为它没有考虑省略号。


在我看来,它太复杂了;任何建议,评论和关注都非常受欢迎。

3 个答案:

答案 0 :(得分:1)

为什么不这样做?

Public Shared Function shortenUrl(ByVal URL As String) As String
    Return shortenUrl(URL, 29)
End Function
Public Shared Function shortenUrl(ByVal URL As String, ByVal maxLength As Integer) As String
    If URL.Length > maxLength Then
        Return String.Format("{0}...{1}", URL.Substring(0, maxLength / 2),URL.Substring(URL.Length - (maxLength / 2)))
    Else
        Return URL
    End If
End Function

至少可以摆脱所有的暂时声明

答案 1 :(得分:1)

嗯,我不知道它是否太复杂......但这是错误的。如果我调用shortenUrl(URL,29),我希望返回的最大长度为29个字符。你的代码会给我31.如果我用30的长度调用它,我会得到33个字符。你没有包括插入的“...”,你依靠舍入来获得子串长度并删除其余部分。

我会添加一些参数验证,并将其更改为:

Public Function shortenUrl2(ByVal URL As String, ByVal maxLength As Integer) As String
    Const middle as String = "..."
    If maxLength < 0 Then
       Throw New ArgumentOutOfRangeException("maxLength", "must be greater than or equal to 0")
    ElseIf String.IsNullOrEmpty(URL) OrElse URL.Length <= maxLength Then
       Return URL
    ElseIf maxLength < middle.Length Then
       Return URL.Substring(0, maxLength)
    End If

    Dim left as String = URL.Substring(0, CType(Math.Floor(maxLength / 2), Integer))
    Dim right as String = URL.Substring(URL.Length - (maxLength - left.Length - middle.Length))

    Return left & middle & right
End Function

答案 2 :(得分:0)

Public Shared Function shortenUrl(ByVal URL As String, Optional ByVal maxLength As Integer = 29) As String
    If URL.Length > maxLength Then       
        Return String.Format("{0}...{1}", URL.Substring(0, maxLength / 2), URL.Substring(URL.Length - (maxLength / 2)))
    Else
        Return URL
    End If
End Function

不确定为什么人们如此讨厌可选参数。他们执行完全相同的操作向用户公开如果他们不提供默认值,将默认值。