`
xyh
  • 浏览: 86062 次
  • 性别: 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>难道还不支持回车么?为什么要搞得这么复杂。

相关推荐

    Windows网络编程技术

    - **平台问题**: 讨论了在不同平台上使用Winsock API时可能遇到的问题及解决方案。 **5.6 选择适当的协议** - **选择协议**: 提供了关于如何根据应用需求选择合适的网络协议的指导。 **5.7 小结**: 对Winsock API...

    剑指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`类来创建自定义的`...

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

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

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

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

    linuxcnc_printnc

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

    horiseon-code-refactor

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

    设置段落的格式实用教案.pptx

    首行缩进是较为常见的格式设置,这可以通过直接在段首输入空格来实现,但更推荐使用“格式”菜单中的“段落”命令进行精确设置。在“段落”设置中,选择“特殊格式”的“首行缩进”,输入特定的字符数,可以精确控制...

    安徽省淮北市三校 高二数学上学期期中联考试题(扫描版) 试题.doc

    不等式的分类讨论则需要学生不仅要理解不等式本身的求解方法,还要能够根据题目的具体要求进行合理的分类。 等差数列与等比数列是数列章节中非常重要的两个知识点。这类题目通常要求学生不仅能求出数列的通项公式,...

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

    例如,通过X X X xx X X 0 ︳这样的节奏模式,学生可以在空格处填入相应的歌词,从而加深对歌曲节奏的记忆。 在进行歌曲的节奏练习之后,教师会引导学生进行分段练习,进一步提高他们的音乐表现能力。此时,教师还...

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

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

Global site tag (gtag.js) - Google Analytics