首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中字符第9次出现时如何分割字符串

Java中字符第9次出现时如何分割字符串
EN

Stack Overflow用户
提问于 2015-02-06 04:04:17
回答 5查看 5.2K关注 0票数 2

我想在逗号,的第4次出现时拆分一个字符串。

怎么做?以下是一个例子:

代码语言:javascript
复制
String str = "1,,,,,2,3,,1,,3,,";

Expected output:
array[0]: 1,,,,
array[1]: ,2,3,,
array[2]: 1,,3,,

我试过像这样使用谷歌番石榴:

代码语言:javascript
复制
Iterable<String> splitdata = Splitter.fixedLength(4).split(str);
output: [1,,,, ,,2,, 3,,1, ,,3,, ,]

我也试过这个:

代码语言:javascript
复制
String [] splitdata = str.split("(?<=\\G.{" + 4 + "})");
output: [1,,,, ,,2,, 3,,1, ,,3,, ,]

然而,这并不是我想要的产出。我只想在逗号的第四次出现时拆分字符串。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-02-06 04:29:38

取两个整数变量。一种是数“,”的“no”。如果“,”发生,计数就会移动。如果计数为4,则将其重置为0。另一个int值将指示字符串将从何处被切断。它将从0开始,在检测到第一个字符串之后,端点(字符在字符串中的位置)将是下一个字符串的第一个点。使用此起始点和当前终结点(i+1,因为发生后i值将增加)。最后,在数组列表中添加字符串。这是一个示例代码。希望这能帮到你。对不起我的英语不好。

代码语言:javascript
复制
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;
      }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2016-10-07 17:44:10

下面是一个更灵活的函数,它使用了这个答案的一个想法

代码语言:javascript
复制
static List<String> splitAtNthOccurrence(String input, int n, String delimiter) {
    List<String> pieces = new ArrayList<>();
    // *? is the reluctant quantifier
    String regex = Strings.repeat(".*?" + delimiter, n);
    Matcher matcher = Pattern.compile(regex).matcher(input);

    int lastEndOfMatch = -1;
    while (matcher.find()) {
        pieces.add(matcher.group());
        lastEndOfMatch = matcher.end();
    }
    if (lastEndOfMatch != -1) {
        pieces.add(input.substring(lastEndOfMatch));
    }
    return pieces;
}

这就是你用你的例子来称呼它的方式:

代码语言:javascript
复制
String input = "1,,,,,2,3,,1,,3,,";
List<String> pieces = splitAtNthOccurrence(input, 4, ",");
pieces.forEach(System.out::println);
// Output:
// 1,,,,
// ,2,3,,
// 1,,3,,

我使用来自番石榴番石榴

票数 1
EN

Stack Overflow用户

发布于 2015-02-06 08:41:58

如果您想要得到数组,也可以试试这个。

代码语言:javascript
复制
    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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28358388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档