百度和谷歌都搜了一番,感觉没有满意的,索性干脆自己写
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的时候换一下就好。
这里并没有考虑到如果最后一个字符是符号然后被弄到一行的前面或者把数字都打乱了的情况,要实现那个估计复杂度会提高好几个等级,罢了。
总之,简单问题简单解决。