【问题标题】:Java REGEX .replaceall() not working on specific JSON object (converted to string)Java REGEX .replaceall() 不适用于特定的 JSON 对象(转换为字符串)
【发布时间】:2016-10-22 22:10:27
【问题描述】:

我正在尝试从 JSON 对象中删除所有斜线,然后将其添加到数组列表中。无论我在 Regex 中输入什么内容,它都是这样的: 我还想删除括号和重复的字符串,但即使尝试删除斜杠也不起作用,所以我正在尝试构建它。就像测试一样,我尝试替换字符串中的任何内容,但无论我选择什么(甚至是字母数字),它都不起作用。

类别列表中项目的示例输出: "[[\"地中海\",\"地中海\"],[\"希腊语\",\"希腊语\"]]"

private static final ArrayList<String> BusinessIDList = new ArrayList<>();
private static ArrayList<String> RatingList = new ArrayList<>();
private static ArrayList<String> cityList = new ArrayList<>();
private static ArrayList<String> stateList = new ArrayList<>();
private static ArrayList<String> addressList = new ArrayList<>();
private static ArrayList<String> categoryList = new ArrayList<>();
private static ArrayList<String> phoneList = new ArrayList<>();
private static ArrayList<String> nameList = new ArrayList<>();

    private static void queryAPI(YelpAPI yelpApi, YelpAPICLI yelpApiCli) {

    String searchResponseJSON = yelpApi.searchForBusinessesByLocation(yelpApiCli.term, yelpApiCli.location);

    JSONParser parser = new JSONParser();
    JSONObject response = null;
    try {
        response = (JSONObject) parser.parse(searchResponseJSON);
    } catch (ParseException pe) {
        System.out.println("Error: could not parse JSON response:");
        System.out.println(searchResponseJSON);
        System.exit(1);
    }


    JSONArray businesses = (JSONArray) response.get("businesses");

    for (int i = 0; i < businesses.size(); i++) {
        JSONObject temp = (JSONObject) businesses.get(i);
        JSONObject temp1 = (JSONObject) temp.get("location");

        BusinessIDList.add(temp.get("id").toString());
        RatingList.add(temp.get("rating").toString());
        cityList.add(temp1.get("city").toString());
        stateList.add(temp1.get("state_code").toString());
        phoneList.add(temp.get("phone").toString());

        String tempCat = temp.get("categories").toString();
        tempCat = tempCat.replaceAll("\\\\", " ");
        categoryList.add(tempCat);

        String tempAdr = temp1.get("address").toString();
        tempAdr = tempAdr.replaceAll("\\\\", " ");
        addressList.add(tempAdr);

        nameList.add(temp.get("name").toString());

    }

【问题讨论】:

  • 让我们保持简单; String t="[[\\\"Med\\\",\\\"med\\\"]"; t = t.replaceAlll("\\\\",""); System.out.println(t);
  • 我无法重现您的问题,但是您的代码不完整,无法单独运行。您能否发布一个重现问题的minimal reproducible example
  • 没问题,抱歉。
  • 新代码肯定不是最小的,也不是完整的。如果您希望人们帮助您,您必须提供代码和输入数据,使其(轻松)可运行以重现问题。请仔细阅读minimal reproducible example帮助页面。
  • 我的意思是,只有你能修复你的代码。你问一个关于为什么模式没有按预期匹配或替换的问题,你展示了一个我们看到模式的例子,你告诉我们输入是什么,然后声称输出没有改变。出色地。试一试就行了。全靠自己。 System.out.println("[[\\\"Iknow\\\",\\\"whatImDoing\\\"]]".replaceAll("\\\\","")); 我想你会发现你的问题与模式无关,replaceAll 也与其他地方无关。

标签: java json regex


【解决方案1】:

您没有将tempCat 分配给replaceAll 的返回值。 尝试改变:

tempCat.replaceAll("\\\\\\\\", " ");

tempCat = tempCat.replaceAll("\\\\\\\\", " ");

有关replaceAll 方法的更多信息,请参阅: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String)

编辑:抱歉,更新了正确的链接。

【讨论】:

  • 那个没有雪茄。抱歉,我之前已将其删除以尝试将其作为可能的解决方案。
猜你喜欢
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 2013-09-22
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多