为了账号安全,请及时绑定邮箱和手机立即绑定

Java Regex 拆分单词、标点符号、空格、换行符但保持收缩?

Java Regex 拆分单词、标点符号、空格、换行符但保持收缩?

智慧大石 2021-09-12 10:35:18
我想使用正则表达式将一个长字符串按单词拆分为其内容的数组。现在我正在使用 (?<=\b) 但问题是它拆分了收缩的单词(例如你正在修复,诸如此类)。我需要一个正则表达式,它可以使标点符号成为自己的元素,除了上述情况外,还有制表符、空格、新行也是它们自己的元素。有任何想法吗?
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

查看 StringTokenizer。您可以指定多个分隔符(第二个参数),并且可以指定是否返回此类分隔符(将第三个参数设置为 true 以返回空格、换行符、制表符等)。如果您不希望空格、制表符、换行符作为标记返回,请设置为 false(或者更好,不要有第三个参数)。


String testString = "this isn't\nright\t 'cause it ain't true";

StringTokenizer s = new StringTokenizer(testString," \n\t\r",true);

while (s.hasMoreTokens()) {

    System.out.println("'" + s.nextToken() + "'");

}

输出:


'this'

' '

'isn't'

'

'

'right'

'   '

' '

''cause'

' '

'it'

' '

'ain't'

' '

'true'


查看完整回答
反对 回复 2021-09-12
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

我认为您需要做的是查看\b("word boundary") 的定义,然后查看\w ("word") 并将 a 重新定义'为单词的一部分。像这样的东西,尽管这取决于您是否也需要分隔符,或者您是否可以让正则表达式吞下它们。


   public static void main( String[] args ) {

      String test = "Don't fear the reaper.";

      String regex = "[^a-zA-Z0-9']";

      System.out.println( Arrays.toString( test.split( regex ) ) );

   }

输出:


run:

[Don't, fear, the, reaper]

BUILD SUCCESSFUL (total time: 0 seconds)


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信