繁体   English   中英

基于多个分隔符拆分字符串java

[英]Splitting a string java based on multiple delimiters

我需要根据分隔符拆分一个字符串并将其分配给一个对象。 我知道split功能,但是我无法知道如何为我的特定字符串做这个。

对象的格式为:

class Selections{
int n;
ArrayList<Integer> choices;
}

字符串的形式如下:

1:[1,3,2],2:[1],3:[4,3],4:[4,3]

哪里:

1:[1,3,2] is an object with n=1 and Arraylist should have numbers 1,2,3. 
2:[1] is an object with n=2 and Arraylist should have number 1

等等 。

我不能使用split作为分隔符,因为单个对象和[]中的元素都用“,”分隔。

任何想法,将不胜感激。

使用“],”作为分隔符怎么样? 如果你的结构与你说的完全一样,它应该能够识别和分裂。

(对不起,我想留下评论,但我的声誉不允许)

您可以使用正则表达式获得更强大的结果,如下所示:

String s = "1:[1,3,2],2:[1],3:[4,3],4:[4,3],5:[123,53,1231],123:[54,98,434]";
// commented one handles white spaces correctly
//Pattern p = Pattern.compile("[\\d]*\\s*:\\s*\\[((\\d*)(\\s*|\\s*,\\s*))*\\]");
Pattern p = Pattern.compile("[\\d]*:\\[((\\d*)(|,))*\\]");
Matcher matcher = p.matcher(s);

while (matcher.find())
  System.out.println(matcher.group());

可以将正则表达式调整为更准确(例如,处理空格),但它在示例中工作正常。

您需要执行多个拆分。

  1. 拆分分隔符“],”(如其他评论和答案中所述)。
  2. 对于每个结果字符串,使用分隔符“:[”拆分。
  3. 你将需要清理最后一个条目(从步骤1中的拆分),因为它将以']'结束

我不知道如何使用内置函数。 我只想编写自己的split方法:

private List<Sections> split(String s){
    private List<Sections> sections = new ArrayList<>();
    private boolean insideBracket = false;
    private int n = 0;
    private List<Integer> ints = new ArrayList<>();

    for (int i = 0; i < s.length(); i++){
        char c = s.charAt(i); 
        if(!insideBracket && !c.equals(':')){
            n = c.getNumericValue();
        } else if(c.equals('[')){
            insideBracket = true;
        } else if (c.equals(']')){
            insideBracket = false;
            sections.add(new Section(n, ints));
            ints = new ArrayList();
        } else if(insideBracket && !c.equals(',')){
            ints.add(c.getNumericValue());
        }
    }
}

你可能需要稍微修改一下。 现在,如果一个数字有多个数字,它就不起作用。

尝试这个

while(true){
        int tmp=str.indexOf("]")+1;
        System.out.println(str.substring(0,tmp));
        if(tmp==str.length())
            break;
        str=str.substring(tmp+1);   
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM