Не уверен, что вы хотите, поэтому здесь идет:
Вариант 1a
Будет возвращено String[]
содержащее элементы:
[ "aaa,bbb",
"ccc,ddd",
"eee,fff" ]
если вы вызываете это с вашей исходной строкой:
public static String[] split1(String source) {
final ArrayList<String> res = new ArrayList<String>();
if (source != null) {
source = source.trim();
if (source.startsWith("{") && source.endsWith("}")) {
final Pattern p = Pattern.compile("\\{([^}]+)\\}[,]?");
final Matcher m = p.matcher(source.substring(1).substring(0, source.length() - 2));
while (m.find()) {
res.add(m.group(1));
}
}
}
return (res.toArray(new String[res.size()]));
}
Вариант 1b
РЕДАКТИРОВАТЬ: это немного проще, чем 1а, для того же результата:
public static String[] split3(final String source) {
final ArrayList<String> res = new ArrayList<String>();
if (source != null) {
final Pattern p = Pattern.compile("\\{(([^{}]+)[,]?)+\\}");
final Matcher m = p.matcher(source.trim());
while (m.find()) {
res.add(m.group(2));
}
}
return (res.toArray(new String[res.size()]));
}
Вариант 2a
Это вернет String[][]
содержащие элементы:
[ [ "aaa", "bbb" ],
[ "ccc", "ddd" ],
[ "eee", "fff" ] ]
если вы вызываете это со своей исходной строкой:
public static String[][] split2(String source) {
final ArrayList<String[]> res = new ArrayList<String[]>();
if (source != null) {
source = source.trim();
if (source.startsWith("{") && source.endsWith("}")) {
final Pattern p = Pattern.compile("\\{([^}]+)\\}[,]?");
final Matcher m = p.matcher(source.substring(1).substring(0,
source.length() - 2));
while (m.find()) {
res.add(m.group(1).split(","));
}
}
}
return (res.toArray(new String[res.size()][]));
}
Вариант 2b
РЕДАКТИРОВАТЬ: это немного проще, чем 2а, для того же результата:
public static String[][] split4(final String source) {
final ArrayList<String[]> res = new ArrayList<String[]>();
if (source != null) {
final Pattern p = Pattern.compile("\\{(((\\w+),(\\w+))[,]?)+\\}");
final Matcher m = p.matcher(source.trim());
while (m.find()) {
res.add(new String[] {
m.group(3),
m.group(4)
});
}
}
return (res.toArray(new String[res.size()][]));
}
Вот основной метод тестирования:
public static void main(String[] args) {
final String TEST = "{{aaa,bbb},{ccc,ddd},{eee,fff}}";
System.out.println("split1 (Option 1a)");
for (final String str : split1(TEST)) {
System.out.println(str);
}
System.out.println("split2 (Option 2a)");
for (final String[] strs : split2(TEST)) {
System.out.println(Arrays.toString(strs));
}
System.out.println("split3 (Option 1b)");
for (final String str : split3(TEST)) {
System.out.println(str);
}
System.out.println("split4 (Option 2b)");
for (final String[] strs : split4(TEST)) {
System.out.println(Arrays.toString(strs));
}
}