【问题标题】:splitting a string into N number of strings [closed]将一个字符串分成N个字符串[关闭]
【发布时间】:2011-09-23 10:57:33
【问题描述】:

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

【问题讨论】:

  • 发生了什么?有人刚刚使用现在已经消失的向量发布了我的问题的确切答案:S 有人可以解释一下吗?
  • 可能发帖者删除了答案,我看了它并没有编译
  • @Will,那个人删除了他/她的答案(可能是因为它是错误的)。
  • 他有一些我修正的 sytanx 错误。但逻辑似乎合理
  • @Will,不,这是错误的:在答案中发生了这样的事情:... = s.substring(2, s.length() - 1)2 不正确)

标签: java string split char


【解决方案1】:

试试这个:

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

正则表达式的工作原理如下:从最后一个匹配位置 (\G) 开始,在 2 个字符之后((?&lt;=...) 后面的零宽度正向查找)和至少一个字符之前的任何位置(零宽度正向查找)前面(?=.))。这不应该与字符串开头和结尾的位置匹配,因此 n 可以任意大,而不会导致开头或结尾处为空字符串。

编辑:如果你想尽可能多地拆分,只需省略第二个参数即可拆分。

例子:

String digits = "123456789";

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

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

【讨论】:

  • 不错的建议,但我认为他需要这个例子,n = s.length()/2
  • @ashiaka 如果没有约束,那么split() 的第二个参数应该被省略。这样就可以尽可能频繁地执行拆分。我将添加一个示例。
  • 非常好的一段代码。让我想刷新我的正则表达式:) 干杯托马斯
【解决方案2】:
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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多