在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