Vij*_*Dev 69 java regex string split
在JavaScript中,我们可以在每个第3个字符处拆分字符串
"foobarspam".match(/.{1,3}/g)
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚如何在Java中这样做.有什么指针吗?
Bar*_*ers 120
你可以这样做:
String s = "1234567890";
System.out.println(java.util.Arrays.toString(s.split("(?<=\\G...)")));
Run Code Online (Sandbox Code Playgroud)
产生:
[123, 456, 789, 0]
Run Code Online (Sandbox Code Playgroud)
正则表达式(?<=\G...)
具有一个空字符串匹配的最后一场比赛(\G
),其次是三个字符(...
)之前它((?<= )
)
Kev*_*ion 81
Java不提供功能非常全面的分割实用程序,因此Guava库可以:
Iterable<String> pieces = Splitter.fixedLength(3).split(string);
Run Code Online (Sandbox Code Playgroud)
查看Javadoc for Splitter ; 它非常强大.
Sim*_*son 48
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Fro*_*odo 11
作为对Bart Kiers回答的补充,我想补充一点,可以不使用...
正则表达式中的三个点,这三个点代表您可以编写的.{3}
具有相同含义的三个字符。
然后代码将如下所示:
String bitstream = "00101010001001010100101010100101010101001010100001010101010010101";
System.out.println(java.util.Arrays.toString(bitstream.split("(?<=\\G.{3})")));
Run Code Online (Sandbox Code Playgroud)
有了这个,修改字符串长度会更容易,并且现在使用可变输入字符串长度创建函数是合理的。这可以像下面这样完成:
public static String[] splitAfterNChars(String input, int splitLen){
return input.split(String.format("(?<=\\G.{%1$d})", splitLen));
}
Run Code Online (Sandbox Code Playgroud)
IdeOne 中的一个例子:http ://ideone.com/rNlTj5