【问题标题】:Is there a better way to divide this string into substrings?有没有更好的方法将此字符串划分为子字符串?
【发布时间】:2015-08-07 18:17:09
【问题描述】:

我正在尝试从如下所示的一长串信息中提取"first_name""last_name"

{
    "123123123": {
        "id": "12321312****",
        "email": "***************",
        "first_name": "Marcus",
        "gender": "male",
        "last_name": "Bengtsson",
        "link": "https://www.facebook.com/app_scoped_user_id/123123123/",
        "locale": "en_EN",
        "middle_name": "Peter",
        "name": "Marcus Peter Bengtsson"
    }
}

我这样做的方式(这可能是非常错误且非常糟糕的解决方案)是我首先使用以下代码从"first_name" 提取子字符串到"link"

String subStr = str.substring(str.indexOf("first_name"), str.lastIndexOf("link"));

然后我得到:

first_name":"Marcus","gender":"male","last_name":"Bengtsson","

然后我做同样的事情,但从":""gender" 得到"first_name

String firstNameOfUser = subStr.substring(subStr.indexOf(":")+2, subStr.lastIndexOf("gender")-3);

那么"last_name"也是一样的:

String lastNameOfUser = subStr.substring(subStr.indexOf(""last_name"")+12, subStr.lastIndexOf(",")-1);

最后我在两个字符串之间添加一个空格:

String nameOfUser = new StringBuilder().append(firstNameOfUser).append(" ").append(lastNameOfUser).toString();

然后我得到:

Marcus Bengtsson

可能有更好的方法可以做到这一点,但我无法弄清楚如何。

【问题讨论】:

  • 使用 JSON 解析器,例如 GSONjson-simple
  • 看起来像一个 json 字符串。所以你应该使用json解析器

标签: java append substring indexof lastindexof


【解决方案1】:

这看起来像 JSON,因此使用许多可用的解析器之一对其进行解析会更好,然后提取数据。

【讨论】:

  • 好的,但我获取的数据来自网页。如何先保存下来?我使用 InputStream 和 BufferedReader 从站点获取数据,然后使用 StringBuilder 将其修补为字符串。现在这似乎是一个完全不同的问题。
  • 大多数库都可以直接使用InputStream。您甚至不需要为它们构建字符串。
  • 好吧,我尝试了 Json,但现在我无法保存 JSONObject 中的字段。我收到错误org.json.JSONException: JSONObject["first_name"] not found. 但是当我第一次打印出整个 JSONObject 时,我清楚地看到了所有字段。不知道我做错了什么......哦,没关系,我现在明白了。
【解决方案2】:

给定的String是一个JSON,使用JSONParser解析成json,然后提取需要的数据。

【讨论】:

    【解决方案3】:

    这是一个json?访问此链接JSON Example

    nameOfUser = 123123123.first_name + " " + 123123123.last_name;
    

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      正如@Crozin 所写,它看起来像 json,但如果你不能以这种方式解析它,你总是可以使用正则表达式。只需使用 Matcher、Pattern 和正则表达式 ^.*\"first_name\":\"([a-zA-Z]+)\".*\"last_name\":\"([a-zA-Z]+)\".*$

      【讨论】:

      • 我想说你不能总是使用正则表达式。如果数据足够简单并且您知道将包含什么内容,那么它可能会起作用,但由于 JSON 可以变得相当复杂,因此正则表达式最终会中断。
      • 投反对票:这是一个非常糟糕且容易出错的解决方案。正则表达式可能看起来是一种快速简单的解决方案,但大多数情况下,当您处理复杂的结构化语言(如 JSON)时,它们并非如此。
      • 正如我所写的,如果无法解析为 json,则可以使用正则表达式。
      猜你喜欢
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      相关资源
      最近更新 更多