【问题标题】:Filtering string output/extracting one key value pair过滤字符串输出/提取一个键值对
【发布时间】:2018-12-17 19:34:41
【问题描述】:

这个:

txtTaxRate.setText(GetURLContent.getData(sURL));

输出这个:

{"taxrate":0.15,"year":2017,"developer":"","salary":10000.0,"status":"S"}

如何只输出税率 (0.15)?这是一个 json 到字符串或键值对。我的教授说这可以通过在一行中从这个输出中“获取”一些东西来完成,他说我很接近但我真的不知道从这里去哪里。

【问题讨论】:

    标签: java filter output extract


    【解决方案1】:

    如果您确定您的字符串将始终具有您显示的格式,那么这行就可以了:

    txtTaxRate.setText(GetURLContent.getData(sURL).substring(11, 15));
    

    如果不想使用幻数,可以使用indexOf andsubstring`的组合来实现,例如这样:

    String data = GetURLContent.getData(sURL);
    int fromIndex = data.indexOf("\"taxrate\":") + "\"taxrate\":".length();
    int toIndex = data.indexOf(",\"year\"");
    txtTaxRate.setText(data.substring(fromIndex, toIndex));
    

    显然,这不是很漂亮。您可以使用JSON parser 获得更通用的解决方案。

    【讨论】:

      【解决方案2】:

      您可以使用 2 种方法:inStr()substring()
      你可以在这里找到它们:String class

      使用此代码:

      String str = "{\"taxrate\":0.15,\"year\":2017,\"developer\":\"\",\"salary\":10000.0,\"status\":\"S\"}";
      String taxrate = str
              .substring(0, str.indexOf(","))
              .substring(str.indexOf(":") + 1);
      System.out.println(taxrate);
      

      将打印:

      0.15
      

      首先,您将字符串直到第一次出现","
      然后在那个子字符串中你得到":"之后的部分。

      【讨论】:

        【解决方案3】:

        GetURLContent.getData(sURL) 返回txtTaxRate.setText() 正在使用的字符串。现在因为你得到一个字符串,所以你可以先将它转换为JSON,或者其他简单的方法如下所示:

        String s = GetURLContent.getData(sURL);
        String[] arr = s.substring(1,s.length()-1).split(",");
        String requiredText = Arrays.stream(arr).filter(s2 -> s2.contains("taxrate")).findFirst().get();
        

        现在当您执行System.out.println(requiredText ); 时,您将看到输出"taxrate":0.15。 另请注意,您需要java 8 才能使上述解决方案起作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-04
          • 2016-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多