我想根据出现的次数拆分值。
如果出现次数为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
同样,出现次数因使用情况而异。分裂时,我需要获得最多四个值。
请检查并告诉我这件事。
答案 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个值。