幫 漢字 後括號的平假名換個格式
如果有逛我另一個 blog 就知道我還蠻常放日文歌的
那日文歌漢字的部份通常會有假名來輔助
而我又不習慣他就在後面括號出現,而是習慣以 <span title="..."> 的形式括住它
並撰寫一個 JavaScript 讓習慣假名在後面以括號形式出現的按個按鍵就能轉換成該形式
那每次都手動一個一個改,雖然有 notepad++ 的輔助,其實還蠻快的
但我仍覺是十分浪費時間的動作,所以我就在想了,是否能透過程式來輔助呢?
所以就有了這篇文章的參生了
那其中看到 0x3400, 0x4DFF, 0x4E00, 0x9FFF, 0xF900, 0xFAFF 這些十六進位碼,他們作的動作是找出漢字,如果不在這範圍內,那他們就不是漢字了,那些值是參考 [1] 得來的
那我曾經想過用 Regular Expressions 來處理並使用取代,但我不太知道該怎一次判斷三個區隔來取代,所以我只好改成用笨笨的迴圈方式
Reference:
那日文歌漢字的部份通常會有假名來輔助
而我又不習慣他就在後面括號出現,而是習慣以 <span title="..."> 的形式括住它
並撰寫一個 JavaScript 讓習慣假名在後面以括號形式出現的按個按鍵就能轉換成該形式
那每次都手動一個一個改,雖然有 notepad++ 的輔助,其實還蠻快的
但我仍覺是十分浪費時間的動作,所以我就在想了,是否能透過程式來輔助呢?
所以就有了這篇文章的參生了
using System; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; namespace DMSolution.WinForm1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var sb = new StringBuilder(textBox1.Text.Length * 2); var loc = textBox1.Text.IndexOf("("); var loc_end = textBox1.Text.IndexOf(")"); int i = 0, lastChar = 0; while (loc >= 0 && loc_end >= 0) { for (i = loc - 1; i >= 0; i--) { var tmp = textBox1.Text[i]; var c = Convert.ToInt32(tmp); if (!((c >= 0x3400 && c <= 0x4DFF) || (c >= 0x4E00 && c <= 0x9FFF) || (c >= 0xF900 && c <= 0xFAFF))) { break; } } if (i > 0) { sb.Append(textBox1.Text.Substring(lastChar, i - lastChar)); } sb.AppendFormat("<span title=\"{1}\">{0}</span>", textBox1.Text.Substring(i + 1, loc - i - 1), textBox1.Text.Substring(loc + 1, loc_end - loc - 1)); lastChar = loc_end + 1; loc = textBox1.Text.IndexOf("(", loc_end + 1); loc_end = textBox1.Text.IndexOf(")", loc_end + 1); } if (i > 0) { sb.Append(textBox1.Text.Substring(lastChar)); } textBox1.Text = sb.ToString(); } } }
那其中看到 0x3400, 0x4DFF, 0x4E00, 0x9FFF, 0xF900, 0xFAFF 這些十六進位碼,他們作的動作是找出漢字,如果不在這範圍內,那他們就不是漢字了,那些值是參考 [1] 得來的
那我曾經想過用 Regular Expressions 來處理並使用取代,但我不太知道該怎一次判斷三個區隔來取代,所以我只好改成用笨笨的迴圈方式
Reference:
留言
張貼留言