问题:
在.net(v4.5)中我有一个包含あ, い, う, え, お, か, き, く, け, こ, が, ぎ, ぐ, げ, ご, さ, し, す, せ, そ, ざ, じ, ず, ぜ, ぞ
的日语符号列表。
如何从列表中删除拼音变体,请将上面的列表更改为あ, い, う, え, お, か, き, く, け, こ, さ, し, す, せ, そ
?
C#或VB中的解决方案都没问题。
(请参阅下文,了解我为何尝试这样做的一些信息)
背景:
我有一个MS Access数据库表,其中包含一列中日语的城镇城镇列表,以及相邻列中平假名的读数,如下所示:
町名 ふりがな
------------------------
鵜沼朝日町 うぬまあさひまち
上中屋町 かみなかやちょう
小佐野町 こざのちょう
下切町 しもぎりちょう
町名是镇名,ふりがな是平假名的读物。
我需要显示一个表格,以便搜索地区列表。
当前有一个系统(用VB.NET编写),用户从阅读中选择第一个符号(平假名),然后获取名称以该符号开头的城镇列表供选择
我正在更新该系统并且认为我可以大大简化现有代码,但是遇到了麻烦......
我正在使用以下查询列出第一个阅读符号
SELECT DISTINCT LEFT([ふりがな], 1) FROM MyTable
适用于获取用户可供选择的第一个符号列表。然后我使用该列表填充我的搜索界面上的winforms下拉列表,用户可以从中选择第一个符号,然后填充包含所有可用城镇的列表框。
我遇到的问题是查询返回所有符号(应该如此),包括语音变化,如が,じ,ぴ等,我实际上并不想在我的列表中,因为日本语音变化通常在分组时被忽略符号。
答案 0 :(得分:3)
如果没有查找表,您可以利用Unicode规范化。
如果您将带有变音符号(包括日语浊音标记)的字母标准化为普通表格D,您将获得一个分解的基本字母并结合变音符号。只要拿下第一个角色就可以得到你想要的东西。
name.Normalize(NormalizationForm.FormD).Substring(0, 1)
答案 1 :(得分:0)
Dim x As New List(Of Char) ''containing the chars to be removed
For Each y In x
queryresult.Replace(y, "")
Next
如果您知道哪个是:
Dim phonetics As New List(Of Char)
Dim actuals As New List(Of Char)
For i = 0 To phonetics.Count - 1
queryresult.Replace(phonetics(i), actuals(i))
Next
另一种方式是:
Dim actual As String = queryresult.Split(" ")(0)
答案 2 :(得分:0)
因此,可以通过这样的检查(在VB
中)
if StrConv(StrConv(kana, VbStrConv.Katakana), VbStrConv.Narrow).Length > 1 then
...
end if
任何长度大于1的字符串都是修改后的声音。
转换C#
变得更加棘手,但原则是相同的。这不适用于平假名,因为它们不能是半宽的,所以首先进行片假名转换是非常重要的。