1

これが私の機能です(更新済み):

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楕円を考慮していないため、文字が返されない問題を修正しました。


複雑すぎるように思えます。提案、コメント、懸念事項は大歓迎です。

4

3 に答える 3

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

それは少なくとも一時的な宣言のすべてを取り除く

于 2008-10-22T20:35:11.760 に答える
1

複雑すぎるかどうかはわかりませんが、間違っています。shortUrl(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
于 2008-10-22T21:51:20.703 に答える
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

なぜ人々がオプションの引数をそれほど嫌うのかわからない。それらはまったく同じこと行い、提供しない場合にデフォルトになる値をユーザーに公開します。

于 2008-10-22T20:37:17.090 に答える