String s = "{1,2,{3,4,5},{2,3},4,{3,{4,5},5},3,{1,2,{2,3},4,3},6}"; s = s.substring(1, s.length() - 1); s = s.replaceAll("\\s+", ""); String[] ss = Pattern.compile("(?<!([{][0-9,]{1,1000}[{](([{][0-9,]{1,1000}[}])|([,0-9]{1,1000}))[}])|([{][0-9,]{1,1000})),(?=([0-9]+(,[0-9]+)*([^}]|$))|(\\{([0-9]+)|(\\{[0-9]+(,[0-9]+)*\\})(,([0-9]+)|(\\{[0-9]+(,[0-9]+)*\\}))*\\}))").split(s); for (String sa : ss) { System.out.println(sa); }运行结果12{3,4,5}{2,3}4{3,{4,5},5}3{1,2,{2,3},4,3}6缺点:1)只能处理两层最多嵌套2)该两层嵌套里面比如上面第6个分组,像{4,5}这样的只能有一组 缺点2是致命的..但向前匹配不能用+号.郁闷,也不能([0-9,]{1,1000}){1,1000}
解决方案 »
- 在catch中加入continue,那finally中的语句是否执行
- 有关java中16进制数的问题,请大家赐教
- 【急】请教字符串的位运算【不是高手勿入】
- 往数据库中插入当前时间(年月日时分秒),怎么不能显示时分秒?
- 正则表达式中的group是干什么用的?
- 哪位大虾用hashtable比较熟,帮帮我:)
- io中OutputStream中write的问题
- 结婚找工作,接着散,穷人们来接分
- Java里最好的RAD开发工具是哪个?
- 有谁用过Toolkit.getDefaultkit().createImage(byte[])
- java.io.FileInputStream.read()的返回值类型为什么是int而不是byte
- JTextArea的问题
public static void main(String[] args) {
//数据一
// String s = "{1,2,{3,4,5},{2,3},4,{3,{4,5},5},3,{1,2,{2,3},4,3},6}";
//数据二
String s = "{1,2,{{2,3},3,4,5,{2,3}},{2,3},4,{3,{4,5},5},3,{1,2,{2,3},4,3},6}";
s = s.substring(1, s.length() - 1);
System.out.println(Arrays.asList(s.split(",")));
parseArr(check(s.split(",")));
} private static void parseArr(List<String> sou) {
List<String> list = new ArrayList<String>();
StringBuffer sb = new StringBuffer();
int len = 0;// {}匹配
boolean b = false;// 用来判断前面是否出线{},
boolean lenBoo = false;// 用来判断是否出现{}
boolean isLast = false;// 用来判断添加,
for (int i = 0; i < sou.size(); i++) {
String s = sou.get(i);
if (s.indexOf("{") > -1) {
b = true;
lenBoo = true;
len++;
}
if (s.indexOf("}") > -1) {
lenBoo = true;
len--;
} if (len > 0) {
lenBoo = true;
} if (len == 0 && lenBoo) {
isLast = true;
} if (lenBoo) {
sb.append(s);
if (!isLast) {
sb.append(",");
isLast = false;
}
lenBoo = false;
}
// 不在括号里面或括号已经匹配成功
if (len == 0) {
// 如果前面是否出现{}
if (!b) {
list.add(s);
} else {
list.add(sb.toString().replaceAll("\\{,\\{","{{").replaceAll("\\},\\}", "}}"));
}
sb.delete(0, sb.length());
b = false;
isLast = false;
}
// System.out.print(list);
}
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
} private static List<String> check(String[] arr) {
List<String> list = new ArrayList<String>();
for (int i = 0; i < arr.length; i++) {
String s = arr[i];
if (s.startsWith("{{")) {
list.add("{");
list.add(s.substring(1, s.length()));
continue;
}
if (s.endsWith("}}")) {
list.add(s.substring(0, s.length()-1));
list.add("}");
continue;
}
list.add(s);
}
return list;
}
没用正则给你个参考。可以自己改进下。
String s = "{1,2,{3,4,5},{2,3},4,{3,{4,5},5},3,{1,2,{2,3},4,3},6}";
String ss = s.replaceAll("\\{|\\}|\\,", "");
int[] n = new int[ss.length()];
for(int i = 0;i<ss.length();i++){
n[i] = Integer.parseInt(ss.substring(i,i+1));
System.out.println(n[i]);
}
}
}
static int deep = 0;
public static void main(String[] a) throws Exception{
String s = "{1,2,{3,4,5},{2,3},4,{3,{4,5},5},3,{1,2,{2,3},4,3},6}";
s =s.replace(",", "");
char[] arr = s.toCharArray();
int offset = 1;
int len = 0;
for(int i=1;i<arr.length-1;i++){
if(arr[i]=='{')
{
deep++;
}
else
if(arr[i]=='}')
{
deep--;
}
len++;
if(deep==0){
System.out.println(new String(arr,offset,len));
offset += len;
len=0;
}
}
}
}
像楼主那样输出的……这方法比较2
楼主要输出所有的集合么?
String s = "{1,2,{3,4,5},{2,3},4,{3,{4,5},5},3,{1,2,{2,3},4,3},6}";
s = s.replaceAll("\\{|\\}+", "");
System.out.println(s);
String ss[]=s.split(",");
for (String sa : ss) {
System.out.println(sa);
}
}
这样做符合要求不?
*详细需求就是将一个非规范的字符串格式的3 维int 型数组,转化为真正的3维int型数组
*谁能给出一个任意维数(小于100)的实现?可能要递归?太高维数的int型数组也不是太好定义..哎
*
*/public class Test { public static List<String> parseStr(String s) {
List<String> list = new ArrayList<String>(); s = s.replaceAll("\\s+", "");
char[] arr = s.toCharArray();
int offset = 1;
int len = 0;
int deep = 0;
for (int i = 1; i < arr.length - 1; i++) {
if (arr[i] == '{') {
deep++;
} else if (arr[i] == '}') {
deep--; }
len++;
if (deep == 0 && (arr[i + 1] == ',' || arr[i + 1] == '}')) {
String sn = new String(arr, offset, len);
System.out.println(sn);
list.add(sn);
offset += len + 1;
len = 0;
i++; }
}
return list;
}
public static void printArray(int[][][] intArray){
System.out.println("********************");
for(int i=0;i<intArray.length;i++){
for(int j=0;j<intArray[i].length;j++){
for(int k=0;k<intArray[i][j].length;k++){
System.out.print(intArray[i][j][k]);
if(k<intArray[i][j].length-1)
System.out.print(",");
}
System.out.println();
}
System.out.println("----------------------");
}
}
public static void main(String[] a) throws Exception {
String s1, s2, s3;
String s = "{11,102,{3,434,{5,6,7,8,9,102,33,8}},{12,3},4,{3,{411,5},{233,4},5},3,{1,2,{2,3},4,3},6}";
List<String> c1 = parseStr(s);
int[][][] intArray = new int[c1.size()][][];
for (int i1 = 0; i1 < c1.size(); i1++) {
s1 = c1.get(i1);
if (s1.contains("{")) {
List<String> c2 = parseStr(s1);
intArray[i1] = new int[c2.size()][];
for (int i2 = 0; i2 < c2.size(); i2++) {
s2 = c2.get(i2);
if (s2.contains("{")) {
List<String> c3 = parseStr(s2);
intArray[i1][i2] = new int[c3.size()];
for (int i3 = 0; i3 < c3.size(); i3++) {
s3 = c3.get(i3);
intArray[i1][i2][i3] = Integer.parseInt(s3); } } else {
intArray[i1][i2] = new int[1];
intArray[i1][i2][0] = Integer.parseInt(s2);
}
}
} else {
intArray[i1] = new int[1][1];
intArray[i1][0][0] = Integer.parseInt(s1);
} } printArray(intArray); }
}
感谢5楼,感谢2楼..栈的思路就是强大