2011-09-23 90 views
-2

我想将一个字符串拆分为N个2char字符串。我知道我必须使用String.subSequence。不过,我希望它继续创造这些,直到字符串> 2将字符串拆分为N个字符串

+4

精心?例子? –

+0

发生了什么? 有人刚刚使用现在不存在的向量发布了我的问题的extact答案:S有人可以解释这个吗? – Will

+0

可能是海报删除了答案,我读了它并没有编译 – ilcavero

回答

3

试试这个:

int n = 3; 
String s = "abcdefghijkl"; 

System.out.println(Arrays.toString(s.split("(?<=\\G.{2})(?=.)", n + 1))); 

//prints: [ab, cd, ef, ghijkl], i.e. you have 3 2-char groups and the rest 

正则表达式的工作原理如下:发现后2个字符(后面(?<=...)零宽度阳性的样子)出发的任何位置从最后一个匹配位置(\G)和至少一个以上的字符(零宽度正面向前看(?=.))。这不应该匹配字符串开始和结尾的位置,因此n可以像您想要的那样大,而不会在开始或结束时产生空字符串。

编辑:如果你想尽可能地分割,就省略第二个参数来分割。

实施例:

String digits = "123456789"; 

System.out.println(Arrays.toString(digits.split("(?<=\\G.{2})(?=.)"))); //no second parameter 

//prints: [12, 34, 56, 78, 9] 
+0

不错的建议,但我认为他需要这个例子n = s.length()/ 2 – ashiaka

+0

@ashiaka如果没有约束,那么应该省略第二个参数'split()'。这样分割就尽可能经常进行。我会添加一个例子。 – Thomas

+0

非常好的一段代码。让我想刷我的正则表达式:) 干杯托马斯 – Will

1
String s = "asdasdasd"; 
List<String> segments = new ArrayList<String>(); 
for (int i = 1; i < s.length(); i=i+2) { 
    segments.add(s.substring(i-1, i+1)); 
} 
System.out.println(segments.toString()); 
相关问题