首页 新闻 会员 周边

求大侠帮忙看下c#字符串处理的问题或者思路!谢谢

0
悬赏园豆:10 [已解决问题] 解决于 2013-06-24 15:04

字符串:

string strValue = @"||\F2,,\C1,,w||\F1,,博客园||";

首先\F是字体的意思 ;\C是颜色 ;\S字体大小 里面的数字是具体属性的如颜色有红色,绿色 ;字体有12px ,14px ,20px (没有默认添加属性 这些都是自定义的),合起来的意思就是 "w"字体是宋体 颜色是红色 字体大小默认12px。

如最后的结果为

||\F2,,\C1,,\\S1,,w||\\F2,,\C1,,\\S1,,博客园||(逗号是自己字符处理添加的)。

也可以不加的效果是 |\F2\C1\\S1w||\\F2\C1\\S1博客园||不过这个有bug 就是s后面又出现了1就不知道是文字还是\S后面的(|\F2\C1\\S11w||\\F2\C1\\S1博客园||)

问题是?
这个字符串里面的\F \C\S W 是一种码(GBK的16进制) 数字又是另外一种码(16进制)。
不知道大侠看明白了意思没(复制运行一下 估计就明白了)。

附加我的代码 。 ,不知道大侠你们有什么好的方法或者思路。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string strValue = @"||\F2,,\C1,,w||\F1,,博客园";
            string herGBK = ToHexGBKString(strValue);
            Console.WriteLine(herGBK);
        }

        public static string ToHexGBKString(string strContext)
        {
            if (string.IsNullOrEmpty(strContext)) return null;
            StringBuilder sb = new StringBuilder();
            string str, temp;
            string[] tempArr;
            string[] arrStr = strContext.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < arrStr.Length; i++)
            {
                str = "";//这里的意思是如果字符串里面没有\F或者\C或者\S就默认加上
                if (arrStr[i].IndexOf("\\C") ==-1)
                {
                    str += "\\C1,,";
                }
                if (arrStr[i].IndexOf("\\F")==-1)
                {
                    str += "\\F1,,";
                } 
                if (arrStr[i].IndexOf("\\S") ==-1)
                {
                    str += "\\S1,,";
                }
                arrStr[i] = str + arrStr[i];

                tempArr = arrStr[i].Split(new string[] { ",," }, StringSplitOptions.RemoveEmptyEntries);
                for (int j = 0; j < tempArr.Length; j++)
                {
                    temp = "";
                    if (tempArr[j].IndexOf("\\C") > -1 || tempArr[j].IndexOf("\\F") > -1 || tempArr[j].IndexOf("\\S") > -1)
                    {
                        temp = tempArr[j].Substring(0, 2);//这里取出的是\F;\C;\S
                        byte[] bts = Encoding.GetEncoding("GBK").GetBytes(temp);
                        foreach (var item in bts)
                        {
                            sb.Append(item.ToString("X").PadLeft(2, '0'));
                        }
//这里是\F;\S;\C;后面的数字 temp
= tempArr[j].Substring(2); sb.Append(int.Parse(temp).ToString("X").PadLeft(2, '0')); } else {//这个是值如上面的字符串("w"和"博客园") byte[] bts = Encoding.GetEncoding("GBK").GetBytes(tempArr[j]); foreach (var item in bts) { sb.Append(item.ToString("X").PadLeft(2, '0')); } } } } return sb.ToString(); } } }

代码没有问题。求优化或者更好的方法

s_p的主页 s_p | 初学一级 | 园豆:138
提问于:2013-06-20 01:17
< >
分享
最佳答案
0

建立对象啊,对象有几个属性font,color,size,str,然后一一给它们赋值就行了。

收获园豆:10
happydaily | 菜鸟二级 |园豆:301 | 2013-06-20 08:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册