C# 让字符串定长换行

27 篇文章 1 订阅

百度和谷歌都搜了一番,感觉没有满意的,索性干脆自己写

public class StringUtility {

	public static string BreakLongString(string SubjectString, int lineLength)
	{
        StringBuilder sb = new StringBuilder(SubjectString);
		int offset = 0;
		ArrayList indexList = buildInsertIndexList(SubjectString, lineLength);
		for(int i=0;i<indexList.Count;i++){
			sb.Insert((int)indexList[i]+offset,'\n');
			offset++;
		}
        return sb.ToString();
	}
	
	public static bool IsChinese(char c){
	  return (int)c>=0x4E00 && (int)c<=0x9FA5;
	}
	
	private static ArrayList buildInsertIndexList(string str, int maxLen){
		int nowLen = 0;
		ArrayList list = new ArrayList();
		for(int i=1;i<str.Length;i++){
			if(IsChinese(str[i])){
				nowLen += 2;
			}else{
				nowLen ++;
			}
			if(nowLen > maxLen){
				nowLen = 0;
				list.Add(i);
			}
		}
		return list;
	}
}

最开始的时候没考虑到数字字母等和汉字的问题,后来打算把汉字看成2个长度,这样就比较好计算,觉得不爽的可以改成把数字看成1/2长度,那样参数输入的时候就是以汉字为标准做一个单位长度。

如果想改成加入其他字符串也简单,insert的时候换一下就好。


这里并没有考虑到如果最后一个字符是符号然后被弄到一行的前面或者把数字都打乱了的情况,要实现那个估计复杂度会提高好几个等级,罢了。


总之,简单问题简单解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值