讨论:如何用空格分段

不知道把帖子发在哪个地方,就发在了这个地方。

一说起分段,可能用的最多就是借助HTML的块级元素进行分段,比如p,br,div

问题是,在某些不支持HTML的应用里,比如Applet小程序,Java Swing如何分段呢?

唯一的方法是用空格,比如在第一行末尾用n个空格,一直把第二段的开头几个字逼到第二段(当然不能用回车符),当然这有分辨率的限制,不同分辨率的显示效果是不同的(以1024×768分辨率为主),而且字体大小是12px,而且需要区分半角和全角。

有没有比较好的算法来计算第一行和第二行之间需要多少空格来填充以达到分段的目的。

我的想法是计算每段的字数,同时计算这段可分成几行,计算每行最大的字数,然后得出这段最好一行需要多少空格来填充。

 

 

简单的一段文字例如"

唯一的方法是用空格,比如在第一行末尾用n个空格,一直把第二段的开头几个字逼到第二段(当然不能用回车符),当然这有分辨率的限制,不同分辨率的显示效果是不同的(以1024×768分辨率为主),而且字体大小是12px,而且需要区分半角和全角。<br/>有没有比较好的算法来计算第一行和第二行之间需要多少空格来填充以达到分段的目的。<br/>

我的想法是计算每段的字数,同时计算这段可分成几行,计算每行最大的字数,然后得出这段最好一行需要多少空格来填充。"

把中间的<br/>替换成若干个空格,把“有没有比较好的算法...”挤到第二段,把“我的想法...”挤到第三段

 

下面是一段简单实现的代码,不过还是有点问题的:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META HTTP-EQUIV="ContentType" CONTENT="text/html;charset=utf-8">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <style>
  *{
   font-size:12px;
  }
  </style>
 </HEAD>

 <BODY>
  <textarea name="input" cols="70" rows="14" style="width:100%">
  在互联网世界当中,博客网站的种类是多种多样的。它们中的一些旨在教导、帮助人们交流协作、激发灵感,并拓展我们的思维空间。而另一些博客则侧重于激 发我们的情感,让我们感到愤怒,或是让我们开怀大笑。《电脑世界(Computerworld)》网站的编辑们这些优秀博客网站搜集整理在了一起,为我们 提供了一份最受他们所钟爱的博客网站的列表。最后,我们根据这些博客自身的信息广度、新闻价值、网站设计、更新频率以及娱乐价值,将这份50多位候选人的 大名单做了进一步的缩减,最终得到了这份15个世界最顶级的技术类博客网站排行榜。
  不错,这份排名的确包含了很大的主观成分,但是我们认为它是有史以来发表过的此类博客网站的最棒的排行榜之一。这份名单所涵盖的范围非常广泛:从严肃 的技术性新闻,到对电脑游戏测评和评论,再到新潮消费者电子产品介绍。我们同时也在本份名单的最后增加了一些“荣誉提名”,因为这次排名的竞争是如此的激 烈,让我们感到很难取舍。
  当然了,肯定不会是每一个人都赞同我们的观点。如果你认为有某个博客网站非常的优秀,而又没有出现在我们的“前15名排行榜“中的话,请在本文后面的评论当中留言与我们分享。
  </textarea>
  <br/>
  <input type="button" value="转换" onclick="mychange()"/>
  <input type="button" value="复制到剪切板" onclick="clipboardData.setData('Text',output.value);" style="margin-left:20px"/>
  <SCRIPT LANGUAGE="JavaScript">
  <!--
   /**
   *把半角字符转换成全角字符
   */
   function DBC2SBC(str) {
	var i;
	var result='';
	for(i=0;i<str.length;i++){
	str1=str.charCodeAt(i);
	if(str1<65296){
	 result+=String.fromCharCode(str.charCodeAt(i)); 
	 continue;
	}
	if(str1<125&&!flag)
	 result+=String.fromCharCode(str.charCodeAt(i));
	else
	 result+=String.fromCharCode(str.charCodeAt(i)-65248);
	}
	return result;
   }

   /**
   * StringBuffer类,主要是来处理拼接字符串
   */
   function StringBuffer() {
     this._strings_ = new Array;
   }
   StringBuffer.prototype.append = function(str) {
     this._strings_.push(str);
   }
   StringBuffer.prototype.toString = function() {
      return this._strings_.join("");
   }
   /**
   *去掉字符串开始和结尾的空格
   */
   String.prototype.trim=function(){
      return this.replace(/(^\s*)|(\s*$)/g, "");
   }
   /**
   * 计算字符的长度
   */
	function strenlen(str){
	  var counter;
	  var i;
	  counter=0;
	  for(i=0;i<str.length;i++){
		while(str.charAt(i)==' '||str.charCodeAt(i)>255) i++;
		if(str.charAt(i+1)==' '||str.charCodeAt(i+1)>255||i==str.length-1) counter++;
	  }
	  return counter;
	}
   /**
   * 生成指定长度的空格字符串
   */
   function countofspace(num){
     var max = parseInt(num);
     var space = '&nbsp;';
	 var strA = new StringBuffer();
	 for(var i=0;i<max;i++){
	  strA.append(space);
	}
	 return strA.toString();
   }

   /**
   * 分段思路:使用空格迫使它跳到下一行
   */
   function mychange(){
    //每行59个字,708/12=59个汉字=118个字节
	var inputstr = DBC2SBC(input.innerText);
	var inputes =  escape(inputstr);
    inputes = inputes.split('%0D%0A');
    var result = new StringBuffer();
	for(var i=0;i<inputes.length;i++){
	  var strr = unescape(inputes[i]);
	  if(strr.trim().length!=0){
	   var offset = 118-(strenlen(strr)%118);
	   result.append(strr.trim());
	   result.append(countofspace(offset));
	  }
	}
	output.innerHTML = result.toString();
   }
   
  //-->
  </SCRIPT>
  <br/>
  <textarea name="output" cols="59" rows="14" style="width:708px"></textarea>
 </BODY>
</HTML>
 

你可能感兴趣的:(算法,swing,互联网,情感,prototype)