Ну, я не знаю, слишком ли это сложно ... но это неправильно. Если бы я позвонил ShorttenUrl (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