如何删除某个字符前的所有内容,并将字符拆分为组

时间:2014-04-16 15:03:15

标签: java regex string

所以我有

形式的Java输入
s1,s2,s3,s4,s5,...,sn

我有以逗号分隔的n个字符。我想在某一点拆分它们,并且只在字符串中留下更大索引的字符。 我们假设这段代码

String s = "a,bn,c,st1,d,kr332,23,b4,46"

我想分开它,让我们在第三个标志后说,所以在c。 我希望剩下的字符串是

s="st1,d,kr332,23,b4,46"

我提出了一种方法但看起来很原始

List<String> list = Arrays.asList(s.split(","));
s="";

现在我有一个字符串列表,我可以像

一样遍历它们
for(int i=(number where i want to cut off); i<list.size(); i++){
s+=list.get(i);
}

有更优雅的方式吗?

4 个答案:

答案 0 :(得分:4)

此任务不需要任何正则表达式。

String s = "a,bn,c,st1,d,kr332,23,b4,46";
String find = ",c,";

String r = s.substring(s.indexOf(find)+find.length()); // st1,d,kr332,23,b4,46

修改

As per comments you can use this to remove everything upto 3rd comma:

String r = s.replaceFirst("([^,]*,){3}", "")

答案 1 :(得分:2)

使用JDK 8,并假设您正在按职位搜索令牌,这应该有效:

import static java.util.Arrays.stream;
import static java.util.stream.Collectors.joining;
//...

int pos = 3;
String s = "a,bn,c,st1,d,kr332,23,b4,46";

String[] tokens = s.split(",")  ;
if(tokens.length > pos){
   String rejoined = stream(tokens, pos, tokens.length).collect(joining(","));
}

答案 2 :(得分:1)

尝试:

String s = "a,bn,c,st1,d,kr332,23,b4,46";
String search = "c";
List<String> list = Arrays.asList(s.split(","));

String output = StringUtils.join(list.subList(list.indexOf(search) + 1, list.size()), ",");

输出:

st1,d,kr332,23,b4,46

答案 3 :(得分:1)

我不推荐RegEx ..但是因为它是你问题的一部分,我想更快地写表达式,我把它掀起了:

(?:\w+,){3}(.*)

这将匹配(但不捕获)3组1+个字符([a-zA-Z0-9_]),后跟逗号。然后我们将匹配并捕获字符串中的所有其他内容。

请参阅此处的示例:Regex101


此外,您只需匹配第一个 3组1+个字符([a-zA-Z0-9_]),后跟逗号:

^(\w+,){3}

然后使用Java将此匹配替换为空字符串:Regex101