Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何在每N次出现字符时分割字符串_Java_Arrays_String_Split - Fatal编程技术网

在Java中,如何在每N次出现字符时分割字符串

在Java中,如何在每N次出现字符时分割字符串,java,arrays,string,split,Java,Arrays,String,Split,我想在每四次出现逗号时拆分一个字符串, 如何做到这一点?以下是一个例子: String str = "1,,,,,2,3,,1,,3,,"; Expected output: array[0]: 1,,,, array[1]: ,2,3,, array[2]: 1,,3,, 我试着像这样使用谷歌番石榴: Iterable<String> splitdata = Splitter.fixedLength(4).split(str); output: [1,,,, ,,2,, 3,,

我想在每四次出现逗号时拆分一个字符串

如何做到这一点?以下是一个例子:

String str = "1,,,,,2,3,,1,,3,,";

Expected output:
array[0]: 1,,,,
array[1]: ,2,3,,
array[2]: 1,,3,,
我试着像这样使用谷歌番石榴:

Iterable<String> splitdata = Splitter.fixedLength(4).split(str);
output: [1,,,, ,,2,, 3,,1, ,,3,, ,]
Iterable splitdata=Splitter.fixedLength(4.split)(str);
输出:[1,,,,,,2,3,1,3,,]
我也试过:

String [] splitdata = str.split("(?<=\\G.{" + 4 + "})");
output: [1,,,, ,,2,, 3,,1, ,,3,, ,]

String[]splitdata=str.split((?取两个int变量。一个是计算','的数量。如果出现',则计数将移动。如果计数为4,则将其重置为0。另一个int值将指示从何处切断字符串。它将从0开始,在检测到第一个字符串后,即为终点(字符串中的字符位置)将是下一个的第一个点。请使用此起点和当前终点(i+1,因为发生后,i值将递增)。最后将字符串添加到数组列表中。这是一个示例代码。希望这对您有所帮助。抱歉,我的英语不好

String str = "1,,,,,2,3,,1,,3,,";
int k = 0;
int startPoint = 0;
ArrayList<String> arrayList = new ArrayList<>();
for (int i = 0; i < str.length(); i++)
{
  if (str.charAt(i) == ',')
  {
      k++;
      if (k == 4)
      {
          String ab = str.substring(startPoint, i+1);
          System.out.println(ab);
          arrayList.add(ab);
          startPoint = i+1;
          k = 0;
      }
  }
}
String str=“1,,,,,2,3,1,3,,”;
int k=0;
int起始点=0;
ArrayList ArrayList=新的ArrayList();
对于(int i=0;i
如果您想得到数组中的结果,也可以尝试此方法

    String str = "1,,,,,2,3,,1,,3,,";
    System.out.println(str);
    char c[] = str.toCharArray();
    int ptnCnt = 0;
    for (char d : c) {
        if(d==',')
            ptnCnt++;
    }
    String result[] = new String[ptnCnt/4];
    int i=-1;
    int beginIndex  = 0;
    int cnt=0,loopcount=0;
    for (char ele : c) {
        loopcount++;
        if(ele==',')
            cnt++;
        if(cnt==4){
            cnt=0;
            result[++i]=str.substring(beginIndex,loopcount);
            beginIndex=loopcount;
        }
    }
    for (String string : result) {
        System.out.println(string);
    }

这里有一个更灵活的函数,使用了以下想法:

静态列表splitAtNthOccurrence(字符串输入,int n,字符串分隔符){
列表项=新的ArrayList();
//*?是不情愿的量词
String regex=Strings.repeat(“.*”+分隔符,n);
Matcher Matcher=Pattern.compile(regex).Matcher(input);
int lastEndOfMatch=-1;
while(matcher.find()){
添加(matcher.group());
lastEndOfMatch=matcher.end();
}
如果(lastEndOfMatch!=-1){
添加(input.substring(lastEndOfMatch));
}
返回件;
}
以下是您使用示例对其进行的命名:

String input = "1,,,,,2,3,,1,,3,,";
List<String> pieces = splitAtNthOccurrence(input, 4, ",");
pieces.forEach(System.out::println);
// Output:
// 1,,,,
// ,2,3,,
// 1,,3,,
String input=“1,,,,,2,3,1,3,,”;
列表项=splitAtNthOccurrence(输入,4,“,”);
fixes.forEach(System.out::println);
//输出:
// 1,,,,
// ,2,3,,
// 1,,3,,

我使用
字符串。从中重复

这项工作非常成功,并在Java8中进行了测试

public String[] split(String input,int at){
    String[] out = new String[2];
    String p = String.format("((?:[^/]*/){%s}[^/]*)/(.*)",at);
    Pattern pat = Pattern.compile(p);
    Matcher matcher = pat.matcher(input);
       if (matcher.matches()) {
          out[0] = matcher.group(1);// left
          out[1] = matcher.group(2);// right
       }
    return out;
} 

//Ex: D:/folder1/folder2/folder3/file1.txt
//if at = 2, group(1) = D:/folder1/folder2  and group(2) = folder3/file1.txt

问题是什么。我们了解您的要求,并且我们假设您试图解决此问题。请通过发布代码描述您的尝试,并解释问题所在。使用循环并计算逗号,如果计数=4,则使用条件重置计数,并将以下字符串添加到阵列检查这不是重复的““每第n个位置拆分一次”,因为您需要计算一个特定字符(即逗号)。逗号之间的标记长度是否有限制?
public String[] split(String input,int at){
    String[] out = new String[2];
    String p = String.format("((?:[^/]*/){%s}[^/]*)/(.*)",at);
    Pattern pat = Pattern.compile(p);
    Matcher matcher = pat.matcher(input);
       if (matcher.matches()) {
          out[0] = matcher.group(1);// left
          out[1] = matcher.group(2);// right
       }
    return out;
} 

//Ex: D:/folder1/folder2/folder3/file1.txt
//if at = 2, group(1) = D:/folder1/folder2  and group(2) = folder3/file1.txt