根据Java中出现的次数拆分字符串

时间:2016-04-08 10:42:23

标签: java regex

我想根据出现的次数拆分值。

  • 如果出现次数为4
    例如key = A-B-C-D,答案应为A,B,C,D

  • 如果出现次数超过4次 例如key = A-B-C-D-E-F,答案应为A-B-C,D,E,F

请在下面找到我的尝试:

String key = "A-B-C-D-E-F";
String[] res = key.split("(?<!^[^_]*)_");
System.out.println(Arrays.toString(res));

我的输出为A-B,C,D,E,F,但我期望为A-B-C,D,E,F

同样,出现次数因使用情况而异。分裂时,我需要获得最多四个值。

请检查并告诉我这件事。

3 个答案:

答案 0 :(得分:2)

使用

//String key = "A-B-C-D";       // => [A, B, C, D]
String key = "A-B-C-D-E-F"; // => [A_B, C, D, E, F]
int keep = 3;
String[] res = key.split("-");
if (res.length > 4) {
    String first = String.join("-", Arrays.asList(res).subList(0, keep)); 
    List<String> lst = new ArrayList<>();
    lst.add(first);
    lst.addAll(Arrays.asList(res).subList(keep, res.length));
    res = new String[lst.size()];
    res = lst.toArray(res);
}
System.out.println(Arrays.toString(res));

请参阅IDEONE demo

基本上,我建议先拆分,然后检查我们有多少元素。然后,只需将keep所需的第一个元素,然后将其与剩下的元素合并。

答案 1 :(得分:0)

你也可以尝试这种正则表达方式:

[A-B-C-D]               => [A , B , C , D]
[A-B-C-D-E-F-E-G]       => [A-B-C-D-E , F , E , G]
[AAAA-BBB-CCC-DD-EE]    => [AAAA-BBB , CCC , DD , EE]
[BB-CC-DD-EE]           => [BB , CC , DD , EE]

输出:

foreach( $mypages as $page ) {      
    $content = $page->post_content;
    if ( ! $content ) // Check for empty page
        continue;

    $content = apply_filters( 'the_content', $content );
?>
    <h2><a href="<?php echo get_page_link( $page->ID ); ?>"><?php echo $page->post_title; ?></a></h2>
    <div class="entry"><?php echo $content; ?></div>
    <div class="read_more"><a href="<?php the_permalink();?>">Read More..</a></div>
<?php
}   
?>

答案 2 :(得分:0)

由于您希望在拆分后最多有四个值,并且从后面开始拆分,您可以通过以下正则表达式进行拆分:

key.split("-(?!([^-]+-){3})");

正则表达式简单地用短划线分开,只要它不能找到3个破折号。这导致字符串在最后3个破折号处被分割。假设输入字符串不以短划线结束,结果数组将正好有4个值。