2008-10-22 35 views
1

这里是我的功能(更新):改进VB.NET URL缩短器的建议?

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字符,因为它没有考虑到椭圆的问题。


在我看来,它太复杂了;任何建议,意见,关注都是值得欢迎的。

回答

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 

至少摆脱所有tempoary声明

+0

这就是为什么它似乎过于复杂,谢谢! 我把它归咎于大脑疲劳! – Anders 2008-10-22 20:38:27

+0

它发生了!特别是在一段时间内完成一个项目之后! – 2008-10-22 20:41:41

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 

的不知道为什么人们讨厌可选参数这么多。他们完全相同的事情暴露给用户什么值将默认,如果他们不提供一个。

1

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

我想补充一些PARAM验证,并将其更改为:

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