我有一个字符串,想要字符串直到第3次出现"," 。我可以使用Array实现这一点。这是代码
remote develop branch
输出为: - String test ="hi,this,is,a,string.";
String[] testArray = test.split(",");
System.out.println(testArray[0]+","+testArray[1]+","+testArray[2]);
无论如何使用" substring(0,text.indexOf(","))"方法。第二件事可能是某些情况下没有","在字符串中,我想处理两种情况
提前致谢
答案 0 :(得分:1)
我不确定我是否真的推荐这个,但是 - 是的;有一个two-arg overload of indexOf
,可让您指定要搜索的起始位置;所以你可以写:
final int firstCommaIndex = test.indexOf(',');
final int secondCommaIndex = test.indexOf(',', firstCommaIndex + 1);
final int thirdCommaIndex = test.indexOf(',', secondCommaIndex + 1);
System.out.println(test.substring(0, thirdCommaIndex));
答案 1 :(得分:0)
所以你要找的东西基本上是一种在String中接收char(,)的第n个(第3个)索引的方法。 虽然Java的标准库中没有相应的功能,但您可以创建自己的构造(可能看起来像this answer),
或者您可以使用StringUtils from Apache,使您想要的解决方案看起来像这样:
String test ="hi,this,is,a,string.";
int index = StringUtils.ordinalIndexOf(test, ",", 3);
String desired = test.substring(0, index);
System.out.println(desired);
答案 2 :(得分:0)
您可以使用正则表达式实现此目的:
import java.util.regex.*;
public class TestRegex {
public static void main(String []args){
String test = "hi,this,is,a,string.";
String regex = "([[^,].]+,?){3}(?=,)";
Pattern re = Pattern.compile(regex);
Matcher m = re.matcher(test);
if (m.find()) {
System.out.println(m.group(0));
}
}
}
答案 3 :(得分:0)
使用stream java 8的其他方法。这可以处理两种情况
System.out.println(Stream.of(test.split(",")).limit(3).collect(Collectors.joining(",")));