0

我将如何在出现某个字符的几个地方拆分字符串。

例如,这里是字符串

“10067829311288”

循环遍历String时,如果数字是“1”,则取下两个字符并拆分,如果不是,则只取一个。这是应该如何拆分的。

100 67 82 93 112 88

任何帮助表示赞赏。

4

3 回答 3

3

像这样的东西怎么样:

public static void main(String[] args) {
    final String s = "10067829311288";
    final List<Integer> split = new LinkedList<>();
    int i = 0;
    while (i < s.length()) {
        final char c = s.charAt(i);
        final int remain = s.length() - i;
        final int step;
        if (c == '1') {
            step = Math.min(remain, 3);
        } else {
            step = Math.min(remain, 2);
        }
        split.add(Integer.parseInt(s.substring(i, i + step)));
        i += step;
    }
    System.out.println(split);
}

或者,使用正则表达式:

public static void main(String[] args) {
    final String s = "10067829311288";
    final List<Integer> split = new LinkedList<>();
    final Pattern pattern = Pattern.compile("1?\\d{2}");
    final Matcher matcher = pattern.matcher(s);
    while (matcher.find()) {
        split.add(Integer.parseInt(matcher.group()));
    }
    System.out.println(split);
}
于 2013-06-01T15:30:28.850 回答
2

这是一种可能的解决方案。

public void split() {
    System.out.println(split("10067829311288"));
}

public List<String> split(String text) {
    List<String> result = new LinkedList<>();

    Matcher m = Pattern.compile("1?\\d\\d").matcher(text);

    while (m.find()) {
        result.add(m.group());
    }
    return result;
}

更新:在看到蜘蛛鲍里斯如何做他的正则表达式后简化了我的正则表达式。

于 2013-06-01T15:19:59.593 回答
0

你可以试试这个方法

"10067829311288".split("(?<=\\G(1\\d\\d|[02-9]\\d))");

演示

System.out.println(Arrays.toString("10067829311288".split("(?<=\\G(1\\d\\d|[02-9]\\d))")));

输出:[100, 67, 82, 93, 112, 88]


\\G表示最后匹配(拆分)的位置,如果第一个匹配不存在,则表示字符串的开始。

(?<=regex)后视机制

\\d代表数字

|是或

于 2013-06-01T16:12:48.887 回答