栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将Java中的字符串拆分为等长的子字符串,同时保持单词边界

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将Java中的字符串拆分为等长的子字符串,同时保持单词边界

如果我正确理解了您的问题,那么这段代码应该可以满足您的要求(但是它假定

maxLenght
等于或大于最长字

String data = "Hello there, my name is not importnant right now."        + " I am just simple sentecne used to test few things.";int maxLenght = 10;Pattern p = Pattern.compile("\G\s*(.{1,"+maxLenght+"})(?=\s|$)", Pattern.DOTALL);Matcher m = p.matcher(data);while (m.find())    System.out.println(m.group(1));

输出:

Hellothere, myname isnotimportnantright now.I am justsimplesentecneused totest fewthings.

"\G\s*(.{1,"+maxLenght+"})(?=\s|$)"
正则表达式的简短说明:

(请记住,Java

不仅在正则表达式中很特殊,而且在字符串文字中也是如此,因此要使用预定义的字符集,就像
d
我们需要编写它那样,
"\d"
因为我们也需要
在字符串文字中对其进行转义)

  • G
    -是表示先前建立的匹配项结尾的锚点,还是表示尚无匹配项(当我们刚开始搜索时)字符串开头(与之相同
    ^
  • s*
    -代表零个或多个空格(
    s
    代表空格,
    *
    “零个或多个”量词)
  • (.{1,"+maxLenght+"})
    -让我们将其拆分为更多部分(在运行时
    :maxLenght
    将保留一些数值,如10,因此regex会将其视为
    .{1,10}
    • .
      代表任何字符(实际上默认情况下它可以代表除行分隔符(如
      n
      或)之外的任何字符
      r
      ,但是由于有了
      Pattern.DOTALL
      标志,它现在可以代表任何字符- 如果要开始分别分割每个句子,则可以摆脱此方法参数,因为它的开始将无论如何都要换行
    • {1,10}
      -这是一个量词,它使前面描述的元素出现1到10次(默认情况下会尝试查找匹配重复的最大数量),
    • .{1,10}
      -因此,根据我们刚才所说的,它只代表“ 1到10个字符”
    • (
      )
      -括号创建组,结构,使我们能够保存匹配的特定部分(此处添加括号后
      \s*
      是因为我们只想在空格后使用部分)
  • (?=\s|$)
    -是一种超前机制,可确保匹配的文本
    .{1,10}
    后面有:

    • 空格(
      \s

或(写为

|

* 字符串末尾`$`。

因此,由于

.{1,10}
我们最多可以匹配10个字符。但是有了
(?=\s|$)
它之后,我们要求与匹配的最后一个字符
.{1,10}
不属于未完成的单词的一部分(后面必须有空格或字符串的结尾)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486934.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号