シフトJISで漢字の泣き別れ問題は普通じゃん!

何なんだよ。得意じゃないけど、書いとくよ。o(`ω´*)oプンスカプンスカ!!

[c language=”#”]
using System;
using System.Text;

namespace pogemuta
{
class Program
{
class SJIString
{
private static Encoding sjis = Encoding.GetEncoding("Shift_JIS");
private static bool isLead(byte c)
{
return (0x81U <= c && c <= 0x9FU) || (0xE0U <= c && c <= 0xFCU);
}
private static bool isTrail(byte c)
{
return (0x40U <= c && c <= 0xFCU && c != 0x7FU);
}
public static int LenB(string str)
{
return System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str);
}
public static string substring(string str, int start, int len)
{
string ret = "";
byte[] src = sjis.GetBytes(str);
start = (start < 0) ? 0 : start;
len = (len < 0) ? 0 : len;
if (len > 0 && start < src.Length)
{
if (start > 0) {
if (isLead(src[start-1]))
{
if (start <= src.Length – 1)
{
if (isTrail(src[start]))
{
start–;
len–;
}
}
}
}
if (start + len > src.Length) {
len = src.Length – start;
}
if (isLead(src[start+len-1]))
{
if (start+len <= src.Length – 1)
{
if (isTrail(src[start+len]))
{
len–;
}
}
}
byte[] dst = new byte[len];
Array.Copy(src, start, dst, 0, len);
ret = sjis.GetString(dst);
}
return ret;
}
}
public static void Main(string[] args)
{
string hoge = "築山 abc 五郎";
Console.WriteLine(SJIString.LenB(hoge).ToString());
Console.WriteLine("|" + SJIString.substring(hoge,0,3)+ "|");
Console.WriteLine("|" + SJIString.substring(hoge,3,8)+ "|");
Console.WriteLine("|" + SJIString.substring(hoge,8,5)+ "|");

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
[/c]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です