`
xyh
  • 浏览: 85273 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

讨论:如何用空格分段

    博客分类:
  • Java
阅读更多

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

一说起分段,可能用的最多就是借助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>
 
分享到:
评论
2 楼 xyh 2009-06-25  
lidong2001 写道
不支持<br>难道还不支持回车么?为什么要搞得这么复杂。

那个Applet的面板就是Java Swing,它的contentPane里不能放置HTML之类的内容,所以没办法只好用空格分段。
那段程序早就该重构了,应该用支持html的java swing面板,只是没有源码,所以还是活受罪
1 楼 lidong2001 2009-06-25  
不支持<br>难道还不支持回车么?为什么要搞得这么复杂。

相关推荐

    四年级语文上册 播种希望的日子教案 长春版

    3. 文本理解:教学过程中,教师引导学生概括课文大意,通过分段阅读和思考,帮助学生理解课文内容,感受人物情感,如爷爷对孙子的关爱和孙子对爷爷的感激之情。 4. 情感教育:课文主题是播种希望,旨在让学生体会...

    剑指offer题解(C++).docx

    《剑指Offer题解》是针对面试准备的一份宝贵资源,由Sidney.Tan精心整理,结合了牛客网上的讨论、《剑指Offer》书中的解法以及个人的编程实践,提供了全面的代码和思路解析。这份文档按照牛客网上的题目顺序,覆盖了...

    Ruby-RubyProgressbarRuby最灵活的文本库进度条库

    同时,Ruby社区有丰富的资源和讨论,可以解答你在使用过程中遇到的疑问。 8. **版本更新** 随着Ruby语言和开发环境的发展,RubyProgressbar也会定期发布新版本,添加新功能,修复已知问题。保持库的更新可以帮助你...

    第03章_基本的SELECT语句.pptx

    3. 注释:单行注释可以使用`#`或`--`(后跟空格),多行注释用`/* ... */`。 4. 命名规则:对象名不超过30个字符,不能包含空格,仅限A-Z、a-z、0-9和下划线。避免使用与保留字、系统名称或常见函数冲突的字段名,...

    登录控制和进度条实例代码ProgressBar

    这些代码可能使用了如Java、C#、Python或JavaScript等编程语言,并利用相关的UI库或框架(如Android的ProgressBar控件,或是前端的Bootstrap、Vue、React等)。通过学习和研究这些代码,开发者能够深入理解登录控制...

    Java编码规范 你不得不注意的东西

    此外,编码规范还涉及变量命名、方法命名、注释的编写、异常处理、空格和缩进的使用、代码块的组织等多个方面。例如,变量名应具有描述性,避免使用单字母名称;方法名应使用动词开头,表示其执行的操作;注释应简洁...

    python把文本转换为html-Python基础教程-把文本转为HTML格式.pdf

    如果遇到空行或文件结束,它会将`block`的内容合并为一个字符串,去掉前后空格,然后通过`yield`返回。这个过程实现了"智能分段",即基于空行将文本划分为HTML段落。 在`simple_markup.py`中,使用正则表达式`re....

    word_2013公式使用

    最后,对于分段函数的输入,可以通过条件判断函数“\if”来实现分段逻辑。 此外,文档最后附有一个常用符号的输入法对照表,方便用户对照输入。 通过这些技巧的学习和运用,用户可以大大提升在Word 2013中输入数学...

    OpenWRT 英文手册

    在报告bug和提交补丁方面,OpenWRT也有一套完整的流程,包括使用Trac票务系统,如何贡献、讨论的平台,以及补丁提交的流程。 OpenWRT支持的网络配置文件中,还包含了诸如无线网络配置的说明,允许用户设置无线网络...

    phonetextfield

    这种输入类型的特殊之处在于它要求用户按照特定的格式(如3-4-4)输入号码,即分段显示电话号码,以提高用户体验并确保数据的一致性。 在iOS开发中,开发者可能会使用`UITextField`类来创建自定义的`...

    五年级语文下册 第三单元忆铁人教案 浙教版.doc

    第二课时则深入讨论第二段,通过填写空格的形式帮助学生理清故事脉络,理解铁人品质的体现。第三课时可能涉及总结回顾,巩固学习成果,以及进行相关的书面作业。 通过这篇课文的学习,学生不仅能了解铁人王进喜的...

    Python基础教程05第五章条件循环和其他语句ppt课件.ppt

    在Python中,语句块的组织依赖于缩进,通常使用4个空格。条件语句,如`if`、`else`和`elif`,用于根据特定条件执行不同代码块。布尔变量在Python中扮演重要角色,它们可以是`True`或`False`,也可以通过对数字、空值...

    小学音乐三年级下册月亮钩钩PPT学习教案.pptx

    此外,教案中还穿插了人类登月的历史知识,这可能作为扩展知识或课堂讨论的一部分,将科学与艺术相结合,拓宽学生的视野,使他们在学习音乐的同时,也能了解到相关的科普知识。 总的来说,这个PPT学习教案以歌曲...

    JS手机号码输入框特效特效代码

    综合以上信息,可以看出这是一个关于利用JavaScript实现手机号码输入框特效的教程或资源包,提供了代码示例、使用说明和可能的下载链接,帮助开发者创建具有验证、分段显示等功能的动态输入框。

    linuxcnc_printnc

    下面将详细讨论LinuxCNC以及PrintNC的功能和使用。 LinuxCNC,原名Emc(Embedded Machine Controller),是一个开源的实时计算机数控(CNC)系统,适用于各种数控设备,包括铣床、车床和激光切割机。它提供了用户友好...

    horiseon-code-refactor

    重构可能包括删除空格、注释不必要的代码、使用一致的缩进和换行,以及合理地分段代码。 5. **响应式设计**:考虑到不同设备的屏幕尺寸,重构可能涉及到确保HTML代码支持响应式布局,使得网站在手机、平板电脑和...

    CSS制作边框效果的技巧总结

    本文将探讨如何使用CSS来创建各种边框效果,重点介绍三种巧妙的技巧,特别是利用`background-origin`属性来实现独特效果。 首先,我们来看第一种方案。这种技术是通过CSS的伪元素`::after`来创建边框。它在每个列表...

Global site tag (gtag.js) - Google Analytics