比如有字符串:
string1=“abcd我和你,abcd你和我,abcd你和我,abcd你和我,abcd你和我”;
string2=“asad,sdasd,asdasd,sdsds”;
我想截取半角下的前20个字符,该怎么办?也就是说在显示时输出的字符串占据的长度是一样的?
截取后的为:string2="asad,sdasd,asdasd,sd";
string1="abcd我和你,abcd你和我";
好像因为汉字是全角的,一个占两个字符
string1=“abcd我和你,abcd你和我,abcd你和我,abcd你和我,abcd你和我”;
string2=“asad,sdasd,asdasd,sdsds”;
我想截取半角下的前20个字符,该怎么办?也就是说在显示时输出的字符串占据的长度是一样的?
截取后的为:string2="asad,sdasd,asdasd,sd";
string1="abcd我和你,abcd你和我";
好像因为汉字是全角的,一个占两个字符
解决方案 »
- 数据库事务处理的时间设置?
- 不太懂C#工程的文件结构,关掉新建的项目后不知道如何打开。
- 在 System.Data.SqlClient.SqlException 中第一次偶然出现的“System.Data.dll”类型的异常
- 如何实现.ASPX文件里的“系统退出”功能?
- 各位大虾!帮帮我怎么在窗体程序中安插音乐!
- 【急】如何在C#的Winform开发中改变ToolBar等控件的背景色?
- 高分求购C#连接Oracle的代码,要求能用字段名访问内容的,而不是列索引
- 如何控制打印机的Landscape属性,在PrinterSettings里没有啊
- 视频开发(视频会议)QQ群
- WinForm程序中用到了Web Service,请问打包应用程序时如何也将Web Service也打包进去
- 我的程序出现这样的警告,应该怎么解决?
- 网络直播如何做?
如果你想达到显示时输出的效果的话有一个函数可以达到你的目的。
首先得到你要输出的窗口的Graphics对象,然后执行MeasureString()你就可以得到一个:SizeF类型的对象了。这个对象表示了这个字符串在这个Graphics上以指定的Font输出时所占的宽度和高度。
sealed class StrUtl
{
// 把一个“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);
}
}
{
//2004.10.31 Gzb 得到一句话的实际占用的“中文”字符的宽度
// 例如:中国2004 -->4个中文宽度 (6个字),实际上这个程序是取得固定中文宽度的缩略字符串
if(sContent==null || sContent==string.Empty || sContent.Length<iNum)
return sContent; char[] cArray=sContent.ToCharArray();
int iAlreadyNum=0;
int iOkLenNum=0;
foreach (char cH in cArray)
{
if(iAlreadyNum < iNum * 2)
{
if(cH>128)
{
iAlreadyNum+=2;
}
else
iAlreadyNum++;
iOkLenNum++;
}
else
break;
}
sContent=sContent.Substring(0,iOkLenNum)+"...";
return sContent;
}
/// 转全角的函数(SBC case)
/// </summary>
/// <param name="input">任意字符串</param>
/// <returns>全角字符串</returns>
///<res>
///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
///</res>
public static string ToSBC(string input)
{
//半角转全角:
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 32)
{
c[i] = (char)12288;
continue;
}
if (c[i] < 127)
c[i] = (char)(c[i] + 65248);
}
return new string(c);
}
/**/
/// <summary>
/// 转半角的函数(DBC case)
/// </summary>
/// <param name="input">任意字符串</param>
/// <returns>半角字符串</returns>
///<res>
///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
///</res>
public static string ToDBC(string input)
{
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 12288)
{
c[i] = (char)32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
c[i] = (char)(c[i] - 65248);
}
return new string(c);
}
而.NET也提供了一些测量的方法,比如Font.MeasureString 等