在Java中,每三个逗号拆分一个字符串
我有一个字符串如下所示:在Java中,每三个逗号拆分一个字符串,java,arrays,split,comma,Java,Arrays,Split,Comma,我有一个字符串如下所示: 0,0,1,2,4,5,3,4,6 我想要返回的是一个字符串[],它在每三个逗号后被拆分,因此结果如下所示: [“0,0,1”、“2,4,5”、“3,4,6”] 我发现了类似的函数,但它们不会以第n个逗号分隔。您可以尝试使用拆分方法与(?尝试以下操作: public String[] mySplitIntoThree(String str) { String[] parts = str.split(","); List<String>
0,0,1,2,4,5,3,4,6
我想要返回的是一个字符串[]
,它在每三个逗号后被拆分,因此结果如下所示:
[“0,0,1”、“2,4,5”、“3,4,6”]
我发现了类似的函数,但它们不会以第n个逗号分隔。您可以尝试使用
拆分方法与(?尝试以下操作:
public String[] mySplitIntoThree(String str)
{
String[] parts = str.split(",");
List<String> strList = new ArrayList<String>();
for(int x = 0; x < parts.length - 2; x = x+3)
{
String tmpStr = parts[x] + "," + parts[x+1] + "," + parts[x+2];
strList.add(tmpStr);
}
return strList.toArray(new String[strList.size()]);
}
List<String> result = new ArrayList<String>();
int startIndex = 0;
int n = 0;
for (int i = x.indexOf(',') + 1; i > 0; i = x.indexOf(',', i) + 1, n++) {
if (n % 3 == 2) {
result.add(x.substring(startIndex, i - 1));
startIndex = i;
}
}
result.add(x.substring(startIndex));
public String[]mysplitothree(String str)
{
String[]parts=str.split(“,”);
List strList=new ArrayList();
对于(int x=0;x
(您可能需要导入java.util.ArrayList和java.util.List)对于编码dojo来说,这是一个不错的选择!下面是我的老式C风格的答案:
如果我们将逗号之间的位称为“parts”,将被拆分的结果称为“substring”,那么:
n
是到目前为止找到的零件数量,
i
是下一部分的开始,
startIndex
当前子字符串的开始
每三个部分迭代一次:切掉一个子串
当逗号用完时,将末尾的剩余部分添加到结果中
List<String> result = new ArrayList<String>();
int startIndex = 0;
int n = 0;
for (int i = x.indexOf(',') + 1; i > 0; i = x.indexOf(',', i) + 1, n++) {
if (n % 3 == 2) {
result.add(x.substring(startIndex, i - 1));
startIndex = i;
}
}
result.add(x.substring(startIndex));
List result=new ArrayList();
int startIndex=0;
int n=0;
对于(int i=x.indexOf(','))+1;i>0;i=x.indexOf(','),i)+1,n++){
如果(n%3==2){
添加(x.子字符串(startIndex,i-1));
startIndex=i;
}
}
结果.添加(x.子字符串(startIndex));
必须回答:
你试过自己编写一个函数来解析/拆分它吗?一种可能有用的方法是首先将0,0,1,2,4,5,3,4,6
更改为0,0,1 | 2,4,5 | 3,4,6
,这是一个相当简单的正则表达式来代替翻译。或者,直接使用匹配器并以增量方式遍历它。我可以想到两种方法:使用indexOf代码>在while循环中,或在,
上拆分,然后将结果再次粘合在一起,三人一组。您还可以将\\d+替换为[^,]*以使其适用于任何非逗号的内容。因此它适用于“a,b,c,f,g,h,x,y,z”@agbinfo是的,是的,但因为OP询问我使用的数字\\d
。无论如何,很好的附加信息,将包括它来回答。@Pshemo同样,你可能没有意识到这一点,但许多著名的来源说,你不能在Java中进行这种无限查找…只有一些有限形式的变量查找…作为正则表达式的粉丝,这是答案绝对值得投票。例如,看,不少于Jan Goyvaerts。事实上,即使是点星或点加,看起来也不错。可能是一个新的Java版本的故事(Java 7中已经有了)。如果我想在20个逗号的间隔上分割值,或者假设该值是动态的。我们不能使用一些变量来放置第n个数字吗?@b22“在20个逗号的间隔上”,然后答案应该解释它(如果不清楚,你能指出让你困惑的部分吗?)。或者说,如果这个值是动态的“这取决于您对动态的看法。在开始使用正则表达式之后,您无法更改它的工作方式,但您可以在构建它时使用动态值。如果您正在寻找类似于.split((?)的内容,请使用它。”?
List<String> result = new ArrayList<String>();
int startIndex = 0;
int n = 0;
for (int i = x.indexOf(',') + 1; i > 0; i = x.indexOf(',', i) + 1, n++) {
if (n % 3 == 2) {
result.add(x.substring(startIndex, i - 1));
startIndex = i;
}
}
result.add(x.substring(startIndex));
String input = "0,0,1,2,4,5,3,4,6";
String delimiter = ",";
int partitionSize = 3;
for (Iterable<String> iterable : Iterables.partition(Splitter.on(delimiter).split(s), partitionSize)) {
System.out.println(Joiner.on(delimiter).join(iterable));
}
0,0,1
2,4,5
3,4,6