使用正则表达式在Java中悬挂缩进段落

这篇文章显示了如何使用正则表达式将缩进的长段落挂起。 该方法将考虑单词边界,这意味着它将不会破坏缩进单词。 为了说明此问题,请考虑以下示例:

近年来,人们越来越努力从自然语言文本中提取实体之间的关系。 在这篇论文中,我将集中于认识科学文章中报道的实体之间的生物医学关系的各个方面。

输出应为:

There has been an increasing effort in recent years to extract relations betweenentities from natural language text. In this dissertation, I will focus onvarious aspects of recognizing biomedical relations between entities reportedin scientific articles.

我的方法

我们需要一个正则表达式将段落分成固定长度的字符串序列。 假设文本宽度为80,缩进量为3,第一个字符串的长度为80。其余所有字符的长度为77。

该算法的主要过程如下

  1. 获取前80个字符
  2. 对于其余的字符串,将拆分点替换为三个空格

为了找到分裂点,我们使用正则表达式(.{1,77})\s+ 。 该正则表达式搜索一个长度小于等于77并且最后一个字符不是空格的子字符串。 找到它之后,我们用$1\n替换组( $1 )。 因此,java代码应如下所示

String regex = "(.{1,77})\\s+";
String replacement = "   $1\n";
text.replaceAll(regex, replacement);

除了最后一行,此正则表达式工作完美。 如果给定的文本不以空格结尾,例如\n ,则最后一行将无法正确处理。 考虑最后一行为

in scientific articles.

在最后一次搜索中,正则表达式无法在行尾找到空白,因此它将在“科学”和“文章”之间定位空格。 结果,我们将得到

...in scientific
articles.

为了解决这个问题,我在段落末尾添加了一个假的“ \ n”。 格式化后,我将其删除。

代码的其他部分很简单。 在这里,我附上我的源代码。 我使用Apache公共库来生成缩进空间并声明缩进的有效性。 有关最新代码,您可以查看我的Github

/*** Format a paragraph to that has all lines but the first indented.* * @param text text to be formatted* @param hangIndent hanging indentation. hangIndent >= 0* @param width the width of formatted paragraph* @param considerSpace true if only split at white spaces.* @return*/public static String hangIndent(String text, int hangIndent, int width,boolean considerSpace) {Validate.isTrue(hangIndent >= 0,"hangIndent should not be negative: %d",hangIndent);Validate.isTrue(width >= 0, "text width should not be negative: %d",width);Validate.isTrue(hangIndent < width,"hangIndent should not be less than width: "+ "hangIndent=%d, width=%d",hangIndent,width);StringBuilder sb = new StringBuilder(text.substring(0, hangIndent));// Needed to handle last line correctly.// Will be trimmed at lasttext = text.substring(hangIndent) + "\n";// hang indentString spaces = org.apache.commons.lang3.StringUtils.repeat(' ', hangIndent);String replacement = spaces + "$1\n";String regex = "(.{1," + (width - hangIndent) + "})";if (considerSpace) {regex += "\\s+";}text = text.replaceAll(regex, replacement);// remove first spaces and last "\n"text = text.substring(hangIndent, text.length() - 1);return sb.append(text).toString();}

相关工作

还有许多其他方法可以实现悬挂缩进功能。 最简单的方法似乎是先将段落分成单词,然后使用计数器来计算当前行的长度。 只要超过最大长度,我们就会添加换行符和缩进。

我不确定哪种方法更有效,但是绝对非常规表达方法更容易实现和维护。 所以我想这篇文章的重点是学习一些“ NEW ”。

参考: 使用regex可以从PGuru博客上的JCG合作伙伴 Peng Yifan处的Java中缩进一段段落 。

翻译自: https://www.javacodegeeks.com/2014/01/using-regex-to-hanging-indent-a-paragraph-in-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在linux上cuda9.0 cudnn7.* 安装python3.6 tensorflow 1.5.1

链接&#xff1a;https://www.jianshu.com/p/bcf37d0e4e9b 为了入门机器学习的小伙伴能安装好工具&#xff0c;特制作此教程 按照 Anaconda 下载网站上的说明下载并安装 Anaconda。 调用以下命令创建名为 tensorflow 的 conda 环境&#xff1a; conda create -n tensorflow pi…

[Swift]遍历集合类型(数组、集合和字典)

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/ &#xff09;➤GitHub地址&…

config.cfg.php,PHP:使用给定的结构获取变量形式的config.cfg

对于专业人士来说这可能是一个愚蠢的问题&#xff0c;但即使经过几个小时的谷歌搜索&#xff0c;我也找不到解决方案&#xff1a;我有一个共享config.cfg与以下结构(所以我不能做任何关于结构)&#xff1a;[config]fileExtensions"JPEG|JPG|jpg|jpeg|png|gif"content…

沣东新城镐京遗址规划_沣东新城房价为啥这么高?

沣东房价为啥2万&#xff0c;为啥超越曲江浐灞&#xff0c;为啥和高新差不多&#xff1f;很多论坛 账号 抖音 喋喋不休&#xff0c;那么说说到底为啥这么贵1、从2018年开始&#xff0c;沣东新城商品房住宅用地&#xff0c;几乎容积率都在2.8以上&#xff0c;90%以上容积率在2.5…

前端工程师和设计师必读文章推荐【系列三十六】

《Web 前端开发精华文章推荐》自2011年6月20号发布第一期以来&#xff0c;历经五年半&#xff0c;总共发布了30多期。今天这篇是2017年第2期&#xff08;总第36期&#xff09;&#xff0c;希望你能在这里发现有用的资料。 梦想天空专注前端开发技术&#xff0c;分享提升网站用户…

在一台机器上运行多个ActiveMQ实例

几周前&#xff0c;我通过Mule ESB解决方案再次开始使用Apache ActiveMQ作为JMS提供程序。 由于我使用ActiveMQ已经有几年了&#xff0c;所以我认为最好检查一些&#xff08;新&#xff09;功能&#xff0c;例如故障转移传输和其他群集功能 。 为了能够测试这些最后的东西&…

Cannot send session cache limiter - headers already sent问题

在php.ini中将“always_populate_raw_post_data ”设置为“-1”&#xff0c;并重启 转载于:https://www.cnblogs.com/Ares0023/p/10510794.html

P3138 [USACO16FEB]负载平衡Load Balancing_Silver

https://www.luogu.org/problemnew/show/P3138 题目描述 农民约翰的N只牛分别站在他的二维农场的不同位置&#xff08;x1,y1&#xff09;…(xn,yn)&#xff08;1<N<100000,xi和yi是正整奇数&#xff09;。他想建一排无限长度的南北方向的满足等式xa的围栏来把他的农场分成…

saas物资管理界面设计_大型物流企业都在用的SaaS系统,看大规模运配网络如何实现精细化管理?...

企业发展到一定阶段&#xff0c;货品销售网络会不断扩大&#xff0c;就必须有大型高效的物流体系作为支撑&#xff0c;就需要大规模运配网络实现订单履约&#xff0c;物流企业的更大更多的商机也因此产生。由此可见&#xff0c;拥有大规模运配网络的主体有两类&#xff1a;第一…

新手入门指导:Vue 2.0 的建议学习顺序

起步1. 扎实的 JavaScript / HTML / CSS 基本功。这是前置条件。 2. 通读官方教程 (guide) 的基础篇。不要用任何构建工具&#xff0c;就只用最简单的 <script>&#xff0c;把教程里的例子模仿一遍&#xff0c;理解用法。不推荐上来就直接用 vue-cli 构建项目&#xff0…

php post请求返回乱码问题,php post请求乱码的问题

PHP 乱码使用最土模板里的post请求源码如下static public function DoPost($url,$post_dataarray()){$url2 parse_url($url);$url2["path"] ($url2["path"] "" ? "/" : $url2["path"]);$url2["port"] ($url2…

在Google的AppEngine上升级到Java 7

如果您仍在Google AppEngine上运行Java 6应用程序&#xff0c;则将遇到严重的麻烦。 现在&#xff0c;AppEngine团队将随时发布1.8.9版&#xff0c;该版本将不再支持Java 6应用程序的部署。 现有的应用程序将继续运行。 但是您可能应该以必要的紧迫性升级应用程序&#xff0c;…

012python路--迭代器

生成器属于迭代器迭代器包括[字符&#xff0c;列表&#xff0c;元组&#xff0c;字典] a [1,2,3,]d iter(a) print(d) # <list_iterator object>print(next(d))d--迭代器Iterator a--迭代器对象Iterable 迭代器条件&#xff1a;1.有iter方法2.有next方法 for内部三件事…

socket read time out解决方法_time_after方法对jiffies回绕问题的解决

前言&#xff1a; 最近在啃《 Linux内核设计与实现》&#xff0c;看到第四章CFS时候&#xff0c;读了几遍没太理清这一小节到思路&#xff0c;看到40页这么一句话&#xff1a;“如果这里所讨论的定时器节拍对你来说很陌生&#xff0c;快先去看看第十一章再说。因为这点正是引入…

ASP.NET Core Razor Pages

Razor 页面是Asp.Net Core2.0新增的一个功能。Razor 页面是 ASP.NET Core MVC 的一个新特性&#xff0c;它可以使基于页面的编码方式更简单高效。 环境&#xff1a;vs2017 .net core2.2 Razor 页面项目搭建 目录说明 wwwroot&#xff1a;放置网站的静态文件的目录。例如/wwwroo…

curd操作php代码,Laravel 5.6中的CURD操作(代码示例详解)

在本篇文章中&#xff0c;我将给大家分享laravel 5.6版本中的基本crud(创建&#xff0c;读取&#xff0c;更新和删除)应用程序模块。你可以按照下面的步骤在laravel 5.6中创建CRUD应用程序。Laravel是一个流行的开源PHP MVC框架&#xff0c;具有许多高级开发功能。如果你是lara…

为什么c++的开源库那么少?

为什么c的开源库那么少&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「 C的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#xff01;…

页面静态化+过期时间

代码&#xff1a; <?phpHeader("content-type:text/html;charsetUTF-8");$gid $_GET[news_id]0;//商品id$goods_statis_file "goods_file_".$gid.".html";//对应静态页文件$expr 10;//静态文件有效期&#xff0c;秒if(file_exists($goods…

实施动态代理-比较

有时需要拦截某些方法调用&#xff0c;以便每次调用被拦截方法时都执行自己的逻辑。 如果您不属于Java EE的CDI领域&#xff0c;并且不想使用诸如Aspectj之类的AOP框架&#xff0c;那么您将有一个简单而有效的替代方法。 从1.5版开始&#xff0c;JDK附带了类java.lang.reflect…

结构专业规范大全_1.2万篇 建筑行业规范大全套!速来!

应广大站友以及会员用户对建筑规范的要求&#xff0c;我们整理了近几年来国家发布的各个专业的标准、规范、图集&#xff0c;以及全国各地共32个地区的区域标准&#xff0c;总计12000余篇&#xff0c;共计80G的建筑行业规范&#xff01;BIMer自学站将会在一到两个月的之间内相继…