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

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


智慧大石
浏览 116回答 2
2回答

慕标5832272

查看 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()) {&nbsp; &nbsp; System.out.println("'" + s.nextToken() + "'");}输出:'this'' ''isn't''''right''&nbsp; &nbsp;'' '''cause'' ''it'' ''ain't'' ''true'

回首忆惘然

我认为您需要做的是查看\b("word boundary") 的定义,然后查看\w ("word") 并将 a 重新定义'为单词的一部分。像这样的东西,尽管这取决于您是否也需要分隔符,或者您是否可以让正则表达式吞下它们。&nbsp; &nbsp;public static void main( String[] args ) {&nbsp; &nbsp; &nbsp; String test = "Don't fear the reaper.";&nbsp; &nbsp; &nbsp; String regex = "[^a-zA-Z0-9']";&nbsp; &nbsp; &nbsp; System.out.println( Arrays.toString( test.split( regex ) ) );&nbsp; &nbsp;}输出:run:[Don't, fear, the, reaper]BUILD SUCCESSFUL (total time: 0 seconds)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java