在每个第n个字符分割一个string

在JavaScript中,我们可以如何在每个第3个字符处分割一个string

"foobarspam".match(/.{1,3}/g) 

我想弄清楚如何在Java中做到这一点。 任何指针?

你可以这样做:

 String s = "1234567890"; System.out.println(java.util.Arrays.toString(s.split("(?<=\\G...)"))); 

这产生:

 [123, 456, 789, 0] 

正则expression式(?<=\G...)匹配最后一个匹配\G )后面跟着三个字符... )的空string( (?<= )

Java不提供function非常全面的分割实用程序,因此Guava库可以:

 Iterable<String> pieces = Splitter.fixedLength(3).split(string); 

查看Javadoc for Splitter ; 它非常强大

 import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { for (String part : getParts("foobarspam", 3)) { System.out.println(part); } } private static List<String> getParts(String string, int partitionSize) { List<String> parts = new ArrayList<String>(); int len = string.length(); for (int i=0; i<len; i+=partitionSize) { parts.add(string.substring(i, Math.min(len, i + partitionSize))); } return parts; } } 

作为对Bart Kiers答案的补充,我想补充一点,在代表三个字符的正则expression式中你可以写成.{3} ,而不是使用三个点。

那么代码将如下所示:

 String bitstream = "00101010001001010100101010100101010101001010100001010101010010101"; System.out.println(java.util.Arrays.toString(bitstream.split("(?<=\\G.{3})"))); 

有了这个,修改string的长度会更容易,而且对于一个可变的inputstring长度来说,创build一个函数是合理的。 这可以做到如下所示:

 public static String[] splitAfterNChars(String input, int splitLen){ return input.split(String.format("(?<=\\G.{%1$d})", splitLen)); } 

IdeOne中的一个例子: http ://ideone.com/rNlTj5