2017-05-29 77 views
-5

String s = aaa-bbb-ccc-ddd-ee-23-xyz;如何在Java中的5分隔符后截断字符串?

我需要将上面的字符串转换为aaa-bbb-ccc-ddd-ee,这意味着我的输出应该只在第五个分隔符之前打印单词。可以帮助解决这个问题吗?

+0

谷歌搜索yielded http://programming.guide/java/nth-occurrence-in-string.html –

+0

你可以简单地遍历字符串并计算您遇到的分隔符的数量。在计算5个分隔符后,创建一个从第0个索引到第5个分隔符索引的子串 – Flaom

+0

这看起来像是一项家庭作业,请注意详细说明并显示一些代码,以便知道至少您已尝试过某些内容。不要指望人们做你的功课。 –

回答

0

你可以使用正则表达式:

String s = "aaa-bbb-ccc-ddd-ee-23-xyz"; 
Pattern p = Pattern.compile("^\\w+\\-\\w+\\-\\w+\\-\\w+\\-\\w+"); 
Matcher matcher = p.matcher(s); 
matcher.find(); 
System.out.println(matcher.group(0)); 

输出为aaa-bbb-ccc-ddd-ee

如果您已经不仅仅是字母越多,你可以在\\w[^\\-]其抓住所有的字符,但delemiter更换。

0

使用Pattern和Matcher是这样的:

String s = "aaa-bbb-ccc-ddd-ee-23-xyz"; 
Pattern pattern = Pattern.compile("^((.+?-){4}[^-]+).*$"); 
Matcher matcher = pattern.matcher(s); 
if (matcher.find()) { 
    s = matcher.group(1); 
} 

* - 搜索所有符号。 ? - 懒惰的工作
(* - ?) - ' - '

{4} - 在结果字符串 ' - ',这与符号结束搜索字符序列的4倍

[^ - ] + - 在搜索字符后没有' - '
。* - 您以后的另一个字符

matcher.group(1) - 返回第一组。这是((。+? - ){4} [^ - ] +)