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

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

输出应为:

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

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

  1. java a标签正则_正则表达式:java中婚配HTML中a标签中的中文字符

    正则表达式:java中匹配HTML中a标签中的中文字符 今天群里一位朋友问到了一个正则表达式的问题,有如下内容: 特432 453543 a1特123你好123吗? 特2 标签中的文字现在要匹配出内容 ...

  2. java上传文件堆溢出_我的正则表达式导致Java中的堆栈溢出;我错过了什么?

    我试图使用Scanner的正则表达式来匹配文件中的字符串.正则表达式适用于该行以外的所有内容: DNA="ITTTAITATIATYAAAYIYI[....]ITYTYITTIYAIAIYI ...

  3. java pattern堆栈溢出_我的正则表达式导致Java中的堆栈溢出;我错过了什么?

    我试图使用Scanner的正则表达式来匹配文件中的字符串.正则表达式适用于该行以外的所有内容: DNA="ITTTAITATIATYAAAYIYI[....]ITYTYITTIYAIAIYI ...

  4. java替换花括号,用正则表达式替换Java中的大括号{}之间的所有文本

    I have a long string with numerous occurences of text between { } that I would like to remove howeve ...

  5. java中的正则表达式捕获组与引用的概念

    今天群里有个人问,怎样用增则表达式匹配三角形的三边,其实只是要匹配三个数字而已,如 301 402 503 开始认为很简单,我就写了一个   "(([1-9]\\d?)\\s){2}$2&q ...

  6. 【JavaSE】java中的正则表达式(从0到1学会正则表达式)

    文章目录 前言 一.正则表达式的三个常用类 1.Pattern类 2.Matcher类 3.PatternSyntaxException类 二.正则表达式的底层实现 1.Matcher.find()和 ...

  7. css div 悬挂缩进_CSS中的经典字体效果:悬挂缩进

    css div 悬挂缩进 A hanging indent, or hanging paragraph, is a paragraph in which the opening line is lef ...

  8. 如何在Microsoft PowerPoint中创建或删除悬挂缩进

    A hanging indent (often called a negative indent) positions the first line of a paragraph a predeter ...

  9. html5段落缩进,在Word 2010中缩进段落

    在本章中,我们将讨论如何在Word 2010中缩进段落.如您所知,边距设置确定了段落两侧显示的空白区域.您可以从左边距,右边距或两个边距缩进文档中的段落.本章将教你如何在有或没有段落第一行的情况下缩进 ...

  10. 如何在Microsoft Word中添加一个悬挂缩进

    A hanging indent is used to position the first line of each paragraph against the margin, with each ...

最新文章

  1. 平板电脑安装软件_题宝典软件升级了,微信公众号版不受影响,电脑版/手机APP/平板APP需要重新下载安装...
  2. Android基础之Java接口
  3. 图灵九月书讯 ——金秋时节推荐给程序员们的书
  4. git报错:remote: warning: Large files detected.
  5. JavaScript中的数组循环方法
  6. flask登录验证用ajax,基于 Ajax 请求的 Flask-Login 认证
  7. 单片机为什么一直用C语言,不用其他编程语言?只有学过的知道!
  8. goim 中的 data flow 数据流转及思考
  9. 信号(signal)
  10. js数组(列表)的基本操作
  11. python pandas库-dataframe.pivot()方法的理解
  12. web@h,c小总结
  13. 离线CSDN网页打开跳转首页的解决方法
  14. W5500以太网控制器芯片(五):实现FTP客户端
  15. 【精华】多目标跟踪MOT
  16. 明光桥南 || 明光桥北
  17. 超爆笑段子大集锦 你要不笑我自宫
  18. Axure 9 实战案例,基本元件的应用 1,用矩形与标题设计视频封面
  19. 工具及方法 - 斗地主技巧
  20. 【机房收费个人版】DataTable 与泛型集合的较量

热门文章

  1. Flutter系列之Navigator组件使用
  2. codeforces 418B. Cunning Gena (状态dp)
  3. 高德地图开发之点标注marker
  4. bind peeking--绑定变量窥视
  5. java架构图软件,如何画好IT项目中的各种架构图
  6. iview的DatePicker 怎么选择时分秒
  7. 数据技术篇之数据同步
  8. 耳机插入电脑没反应找不到realtek音频管理器
  9. Oracle查询成绩高于成绩,Oracle认证考试成绩查询方法
  10. QStyle之PenStyle的CustomDashLine使用