Предложения по улучшению VB.NET URL сокращения? - PullRequest
1 голос
/ 23 октября 2008

Вот моя функция ( обновлено ):

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 ]

1 голос
/ 23 октября 2008

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

Почему бы не сделать это?

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

Это как минимум избавляет от всех временных деклараций

0 голосов
/ 23 октября 2008
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

Не уверен, почему люди так ненавидят необязательные аргументы. Они делают то же самое, что и раскрывают пользователю, какое значение будет установлено по умолчанию, если они не предоставят его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...