在每个第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