我将此方法移植到VB.NET上了,请看源码(二)
点击次数:13 次 发布日期:2008-11-27 00:55:02 作者:源代码网
|
Public Shared Function GetPyToPy(ByVal PYStr As String, _ Optional ByVal IsComp As Boolean = False) As String If PYStr.Length = 0 Then Exit Function mIsCompelled = IsComp Dim toneSite As Integer Dim toneValue As Integer Dim toneChar As Char toneSite = GetToneSite(PYStr) If toneSite = -1 Then Return PYStr ElseIf toneSite < -1 Then Exit Function End If toneValue = GetToneValue(PYStr, toneSite) If toneValue = -1 Then Exit Function If mIsCompelled Then toneChar = GetToneChar(PYStr, toneSite - 1) Else toneChar = GetToneChar(PYStr) End If If Not isPyChar(toneChar) Then Exit Function Return Conversion(PYStr, toneSite, toneValue, toneChar) End Function "返回标明声调数值的位置 Private Shared Function GetToneSite(ByVal pyStr As String) As Integer If pyStr.Length = 0 Then Exit Function Dim i As Integer, j As Integer = 0 "检查字串中有几个数字 For i = 0 To pyStr.Length - 1 If Char.IsNumber(pyStr.Chars(i)) Then j += 1 End If Next If j = 0 Then "没有数字,即没有标明声调的数值 Return -1 ElseIf j = 1 Then "有一个数字,合法 For i = 0 To pyStr.Length - 1 If Char.IsNumber(pyStr.Chars(i)) Then Return i End If Next Else "有多个数字,不合法,返回其相反数 Return -j End If End Function "返回声调是几声 Private Shared Function GetToneValue(ByVal pyStr As String, _ ByVal Site As Integer) As Integer If pyStr.Length = 0 Then Exit Function If Site >= 0 Then Dim value As Char = pyStr.Chars(Site) Dim num As Integer If Char.IsNumber(value) Then num = CType(value.ToString, Integer) If num >= 0 And num <= 4 Then Return num Else Return -1 End If Else Return -1 End If End If End Function "返回要标声调的字母 Private Shared Function GetToneChar(ByVal pyStr As String, _ ByVal Site As Integer) As Char If pyStr.Length = 0 Then Exit Function If Site >= 0 Then Dim value As Char = pyStr.Chars(Site) Return value End If End Function Private Shared Function GetToneChar(ByVal pyStr As String) As Char If pyStr.Length = 0 Then Exit Function Dim Chr As Char If pyStr.IndexOf(a(0)) >= 0 Then Chr = pyStr.Chars(pyStr.IndexOf(a(0))) ElseIf pyStr.IndexOf(o(0)) >= 0 Then Chr = pyStr.Chars(pyStr.IndexOf(o(0))) ElseIf pyStr.IndexOf(e(0)) >= 0 Then Chr = pyStr.Chars(pyStr.IndexOf(e(0))) ElseIf pyStr.IndexOf(i(0)) >= 0 Then Chr = pyStr.Chars(pyStr.IndexOf(i(0))) ElseIf pyStr.IndexOf(u(0)) >= 0 Then Chr = pyStr.Chars(pyStr.IndexOf(u(0))) ElseIf pyStr.IndexOf(v(0)) >= 0 Then Chr = pyStr.Chars(pyStr.IndexOf(v(0))) End If Return Chr End Function "判断是否为合法的拼音字符 Private Shared Function isPyChar(ByVal chr As Char) As Boolean Select Case chr Case "a"c Return True Case "o"c Return True Case "e"c Return True Case "i"c Return True Case "u"c Return True Case "v"c Return True Case Else Return False End Select End Function "转换 Private Shared Function Conversion(ByVal pyStr As String, _ ByVal toneSite As Integer, _ ByVal toneValue As Integer, _ ByVal toneChar As Char) As String If toneValue >= 1 And toneValue <= 4 Then Select Case toneChar Case "a" pyStr = pyStr.Replace(toneChar, a(toneValue).Chars(0)) Case "o" pyStr = pyStr.Replace(toneChar, o(toneValue).Chars(0)) Case "e" pyStr = pyStr.Replace(toneChar, e(toneValue).Chars(0)) Case "i" pyStr = pyStr.Replace(toneChar, i(toneValue).Chars(0)) Case "u" pyStr = pyStr.Replace(toneChar, u(toneValue).Chars(0)) Case "v" pyStr = pyStr.Replace(toneChar, v(toneValue).Chars(0)) End Select pyStr = pyStr.Replace(toneValue.ToString, "") Return pyStr End If End Function #End Region #Region "由汉字到拼音" Public Shared Function GetHzToPy(ByVal HzStr As String, _ Optional ByVal ToneValue As Integer = 0, _ Optional ByVal IsComp As Boolean = False) As String "ByVal toneValue As Integer, _ If HzStr.Length = 0 Then Exit Function If PyList.Count = 0 Then LoadPyChars() mIsCompelled = IsComp If mIsCompelled Then Else Dim tmpStr As String = "" Dim i As Integer Dim num As Integer For i = 1 To HzStr.Length num = Asc(HzStr) Debug.WriteLine(num.ToString) tmpStr = GetPyChars(num) tmpStr = GetPyToPy(tmpStr & ToneValue) Return tmpStr Next End If End Function Private Shared Function GetPyChars(ByVal num As Integer) As String If num > 0 And num < 160 Then Return Chr(num) Else If num < -20319 Or num > -10247 Then Return "" Else Dim i, value As Integer For i = PyList.Count - 1 To 0 Step -1 If PyList.GetByIndex(i) <= num Then Exit For Next "value = CType(PyList.GetByIndex(i), Integer) Return PyList.GetKey(i).ToString End If End If End Function #End Region End Class 源代码网供稿. |
