Java Regex可以拆分单词,标点,空格,换行符,但保持收缩?

时间:2018-09-09 23:17:22

标签: java regex

我想使用正则表达式按单词将长字符串分成其内容数组。现在我正在使用(?<= \ b),但问题在于它会拆分紧缩的单词(例如,您正在固定,诸如此类)。我需要一个能使标点符号成为其自身元素的正则表达式,但在上述情况下,以及制表符,空格,换行符也是其自身的元素。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

签出StringTokenizer。您可以指定多个定界符(第二个参数),还可以指定是否返回这样的定界符(将第三个参数设置为true以返回空格,换行符,制表符等)。如果您不希望将空格,制表符,换行符作为标记返回,则将其设置为false(或者更好的是,没有第3个参数)。

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'

答案 1 :(得分:0)

我认为您需要做的是先查看\b(“单词边界”)的定义,然后再查看\ w(“ word”),然后重新定义'作为单词的一部分。像这样的东西,尽管这取决于您是否也需要定界符,或者是否可以让正则表达式将其吞下。

   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)