如何拆分复杂字符串

jbas 2010-08-28 03:33:47
各位好,
我现在有一个字符串,如:
String s="[a:ab,cde[],ee[ga]a],[a1:b1a[]aa,gg[]gs e:a g],[a2:b2:a[2] s[e]g]";
//[a:ab,cde[],ee[ga]a],(应该分开的地方)[a1:b1a[]aa,gg[]gs e:a g],(应该分开的地方)[a2:b2:a[2] s[e]g]

用[]包含每个数据,每个数据中用key:value的形式存放。

我现在想得到如下的字符串数组:

arr1:
key: a
value: ab,cde[],ee[ga]a

arr2:
key:a1
value:b1a[]aa,gg[]gs e:a g

arr3
key:a2
value:b2:a[2] s[e]g


谢谢各位!
...全文
151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Inhibitory 2010-08-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sainer 的回复:]

正则表达式
[/Quote]
看你怎么用正则弄出来。
shehun 2010-08-28
  • 打赏
  • 举报
回复
import java.util.ArrayList; public class R { /** * @param args */ public static void main(String[] args) { String[][] s = split("[a:ab,cde[],ee[ga]a],[a1:b1a[]aa,gg[]gs e:a g],[a2:b2:a[2] s[e]g]"); for (String[] ss : s) System.out.println(ss[0] + "\t" + ss[1]); } private static String[][] split(String src) { ArrayList<String[]> list = new ArrayList<String[]>(); int start = 0; int n = 0; String sub; int index; for (int i = 0; i < src.length(); i++) { switch (src.charAt(i)) { case '[': if (++n == 1) start = i + 1; break; case ']': if (--n == 0) { sub = src.substring(start, i); index = sub.indexOf(':'); list.add(new String[] { sub.substring(0, index), sub.substring(index + 1) }); } break; } } String[][] s = new String[list.size()][]; list.toArray(s); return s; } }

zwchunk 2010-08-28
  • 打赏
  • 举报
回复
晕晕的。。。。。。。。。。。。
「已注销」 2010-08-28
  • 打赏
  • 举报
回复

import java.util.ArrayList;

public class R {

/**
* @param args
*/
public static void main(String[] args) {
String[][] s = split("[a:ab,cde[],ee[ga]a],[a1:b1a[]aa,gg[]gs e:a g],[a2:b2:a[2] s[e]g]");
for (String[] ss : s)
System.out.println(ss[0] + "\t" + ss[1]);
}

private static String[][] split(String src) {
ArrayList<String[]> list = new ArrayList<String[]>();
int start = 0;
int n = 0;
String sub;
int index;
for (int i = 0; i < src.length(); i++) {
switch (src.charAt(i)) {
case '[':
if (++n == 1)
start = i + 1;
break;
case ']':
if (--n == 0) {
sub = src.substring(start, i);
index = sub.indexOf(':');
list.add(new String[] { sub.substring(0, index), sub.substring(index + 1) });
}
break;
}
}
String[][] s = new String[list.size()][];
list.toArray(s);
return s;
}
}
「已注销」 2010-08-28
  • 打赏
  • 举报
回复
用栈的方式来处理
读取到[入栈,然后等读到]并且栈内有且只有1个[时,出栈,然后截取字符串,从第一个:分割为2段
angel21li 2010-08-28
  • 打赏
  • 举报
回复
佩服楼上的
jbas 2010-08-28
  • 打赏
  • 举报
回复
厉害,没用正则做出来了。
sun0322 2010-08-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bao110908 的回复:]
Java code
import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String[] args) {
String s="[a:ab,cde[],ee[ga]a],[a1:b1a[]aa,gg[]gs e:a g],……
[/Quote]

你太有时间了。

哈哈
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String[] args) {
String s="[a:ab,cde[],ee[ga]a],[a1:b1a[]aa,gg[]gs e:a g],[a2:b2:a[2] s[e]g]";
String[] ss = split(s);
Entry[] entries = toEntries(ss);
for(Entry entry : entries) {
System.out.println(entry);
}
}

public static Entry[] toEntries(String[] strs) {
Entry[] entries = new Entry[strs.length];
for(int i = 0; i < strs.length; i++) {
int start = (strs[i].charAt(0) == '[' ? 1 : 0);
int end = (strs[i].charAt(strs[i].length() - 1) == ']' ? strs[i].length() - 1 : strs[i].length());
int idx = strs[i].indexOf(':');
if(idx < 0) {
entries[i] = new Entry(strs[i].substring(start, end), null);
} else {
entries[i] = new Entry(strs[i].substring(start, idx), strs[i].substring(idx + 1, end));
}
}
return entries;
}

public static String[] split(String str) {
if(str == null) {
return null;
}
if(str.length() == 0) {
return new String[0];
}

char[] chs = str.toCharArray();

List<String> list = new ArrayList<String>();
int s = 0, len = 0;
for(int i = 0, level = 0; i < chs.length; i++) {
if(chs[i] == ',' && level == 0) {
list.add(new String(chs, s, len));
len = 0;
s = i + 1;
continue;
}
len++;
if (chs[i] == '[') {
level++;
} else if (chs[i] == ']') {
level--;
}
}
list.add(new String(chs, s, len));
return list.toArray(new String[list.size()]);
}

public static class Entry {
private String key;
private String value;

public Entry() {
}

public Entry(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}

@Override
public String toString() {
return "key=" + key + ", value=" + value;
}
}
}
sainer 2010-08-28
  • 打赏
  • 举报
回复
正则表达式

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧