需要按GB(每汉字两字符,数字等一字符)的一定长度来截取字符串

paul9137 2008-02-28 10:31:37
需要按GB(每汉字两字符,数字等一字符)的一定长度来截取字符串
可是C#是按每汉字一字符计算的啊,头痛。
用到的字符串经常是汉字、数字、英文字母混合的。
比如:a中d12文cd,要取6位字符长,用Substring(0,6)取的长度字符不合要求。
怎么办?
...全文
140 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lalac 2008-02-29
  • 打赏
  • 举报
回复
对字符单元操作建议使用StringInfo,然后使用SubstringByTextElements分割。

[code=C#]
String s = "a中d12文cd";
StringInfo si = new StringInfo(s);
String subset = si.SubstringByTextElements(6);
/code]
xeonfeng 2008-02-29
  • 打赏
  • 举报
回复
查MSDN,936码
shinaterry 2008-02-28
  • 打赏
  • 举报
回复
^o^ 虽然来迟, 但愿有分...
Q_282898034 2008-02-28
  • 打赏
  • 举报
回复
学习
wuyi8808 2008-02-28
  • 打赏
  • 举报
回复
    // 把一个“unicode字符串”格式化为全角字符占2个位置的“普通字符串”
// width<0 表示左对齐,右边填空格
// width>0 表示右对齐,左边填空格
public static string StrFormat(string s, int width)
{
Encoding code = Encoding.Default;
byte [] bs = code.GetBytes(s);
bool leftAlign = (width < 0 ? true : false);
if (width < 0) width = - width;
if (bs.Length >= width) return s;
if (leftAlign) return s.PadRight(width-bs.Length+s.Length);
return s.PadLeft(width-bs.Length+s.Length);
}
王集鹄 2008-02-28
  • 打赏
  • 举报
回复
Text = Encoding.Default.GetString(
Encoding.Default.GetBytes("a中d12文cd"), 0, 6); //a中d12
changjiangzhibin 2008-02-28
  • 打赏
  • 举报
回复
只是测试的话(作一下简单处理):
判断是否是数字或字符(如果有控制字符则另加判断条件),是则正常截取;
否则,当作是汉字处理;

if(str.IsDigitOrLetter)
{
//...
}
else
{
//...
}

111,115

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧