Удалить закрытые скобки Java - PullRequest
1 голос
/ 17 октября 2011

Привет, ребята, у меня есть такая строка

String main = "Sandy \"children\":[]"
String foo = "\"children\":[]";

main = main.replaceAll(foo, "");

Если я хочу заменить весь foo в main одним символом "", то какое регулярное выражение мне нужно использовать?

У меня будут такие данные json, что мне нужно заменить все пустые дочерние объекты

{"data" : "Search engines",
                    "children":[ {
                    "data":"Yahoo","children":[{"data":"1","children":[{}]}]},
                    {"data":"Bing","children":[{"data":"2","children":[]}]},{"data":"Bing2"},{"data":"Bing3"},{"data":"Bing4"},{"data":"Bing5"},{"data":"Bing6"},{"data":"Bing7"},{"data":"Bing34"}]                    
                    }

Ответы [ 3 ]

2 голосов
/ 17 октября 2011

Хорошо, теперь вы дали больше информации, я бы настоятельно рекомендовал , а не , используя для этого регулярные выражения. Разобрать JSON и использовать его вместо DOM-представления. В противном случае обязательно найдутся способы обмануть то, что вы используете. Подобные текстовые представления просто не подходят для регулярных выражений IMO.


(Оригинальный ответ ...)

Непонятно, почему вы используете replaceAll и регулярные выражения.

Я подозреваю, что вы просто хотите:

main = main.replace(foo, "");

Это будет обрабатывать foo как обычную строку, а не как регулярное выражение. Если вы действительно не хотите использовать регулярное выражение, используйте replace вместо replaceAll.

0 голосов
/ 17 октября 2011

Я не уверен, что я все еще понимаю ваш вопрос и разбираю его как JSON, тогда ответом может быть манипулирование как JavaScript ... но если вы хотите превратить это:

{"data" : "Search engines",
                "children":[ {
                "data":"Yahoo","children":[{"data":"1","children":[{}]}]},
                {"data":"Bing","children":[{"data":"2","children":[]}]},{"data":"Bing2"},{"data":"Bing3"},{"data":"Bing4"},{"data":"Bing5"},{"data":"Bing6"},{"data":"Bing7"},{"data":"Bing34"}]                    
                }

в это:

{"data" : "Search engines",
                "children":[ {
                "data":"Yahoo","children":[{"data":"1"}]},
                {"data":"Bing","children":[{"data":"2"}]},{"data":"Bing2"},{"data":"Bing3"},{"data":"Bing4"},{"data":"Bing5"},{"data":"Bing6"},{"data":"Bing7"},{"data":"Bing34"}]                    
                }

Затем используйте это выражение:

",?\"children\":\\[(\\{\\})?]"

как в следующем коде (Вау, я думаю, что это правильно, но это было какое-то время ...):

String main = "Sandy \"children\":[]"
String foo = ",?\"children\":\\[(\\{\\})?]";

main = main.replaceAll(foo, "");
//main == "Sandy "
0 голосов
/ 17 октября 2011

вы можете использовать Pattern.quote(String), чтобы убедиться, что в регулярном выражении все считается как буквальное

main = main.replaceAll(Pattern.quote(foo), "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...