【问题标题】:Comma is causing unwanted string split逗号导致不必要的字符串拆分
【发布时间】:2017-12-08 11:49:08
【问题描述】:

我有一组从我的数据库发送的数据 - 收到后,我将其保存在共享首选项中 - 这是我的 getter:

public List getAnswerStringEdit() {
        return answer_edit;
    }

我这样保存:

editor.putString(Constants.ANSWER_EDIT,resp.getAnswer().getAnswerStringEdit().toString().trim());

然后在这里检索它:

String answerString = pref.getString(Constants.ANSWER_EDIT, "").trim();
        answerString = answerString.substring(1, answerString.length() - 1).trim();
        String[] array = answerString.split(",");

最后,我这样访问数组:

et_answer1_edit.append(array[0]);

我的问题是 - 假设我添加了一个中间有逗号的问题,比如 -

问题 1-“为什么坏了,我不知道?

目前,当我检索我的问题时,字符串被拆分,即使整个问题/答案周围都有引号 - 所以在上面的示例中,在数组中的位置 0,我应该有:

为什么坏了,我不知道?”

但是,我却在位置 0:

为什么会损坏 - 然后将位置 1 设为:我不知道

我知道这听起来很愚蠢,因为很明显,我要求在逗号上进行拆分,但我希望在整个字符串对象的末尾,而不是在它的中间。

检索到的JSON如下:

{
    "result": "success",
    "message": "Answer Has Been Selected",
    "answer": {
        "answer_edit": ["Why is this broke, I don't know?", "What is your favorite song, because I want to know"]
    }
}

任何可以帮助我了解导致此问题的原因的帮助/建议,我们将不胜感激。

【问题讨论】:

  • 你必须尝试拆分问号,而不是基于逗号拆分。
  • 是json,当作json处理。
  • @TominB 如果问题中有引号怎么办?
  • @Displayname 没有上下文就没有任何意义。如果您想假装它不是 json,请使用 CSV 解析库或尝试编写自己的。

标签: java android arrays json split


【解决方案1】:

不要使用 ',' 分割字符串,使用 this

JSONObject jsonObject = new JSONObject(answerString );
            JSONArray jsonArray = jsonObject.getJSONObject("answer").getJSONArray("answer_edit");
            Log.e("Json Array elements are","First Element : "+jsonArray.get(0)+"\nSecond Element : "+jsonArray.get(1));
            String QuestionString1 = jsonArray.get(0).toString();
            String QuestionString2 = jsonArray.get(1).toString();

【讨论】:

    【解决方案2】:

    试试这个

    JSONObject jsonObject = new JSONObject("your json response");
    
    try 
      {
          JSONObject answer= jsonObject.getJSONObject("answer");
    
          JSONArray jsonArrayAnswerEdit = answer.getJSONArray("answer_edit");
          Log.e("=>", "" + jsonArrayAnswerEdit);
          for (int i = 0; i < jsonArrayAnswerEdit.length(); i++){
              String que= jsonArrayAnswerEdit.getString(i);
              Log.e("json", i + "=" + que);
         }
      } catch (JSONException e) {
          e.printStackTrace();
      }
    

    【讨论】:

      【解决方案3】:

      试试这个

      JSONObject jsonObject = new JSONObject("your json response");
      
      try 
        {
            JSONObject data = jsonObject.getJSONObject("answer");
      
            JSONArray jsonArray = data.getJSONArray("answer_edit");
            Log.e("=>", "" + jsonArray);
      
            for (int i = 0; i < jsonArray.length(); i++) 
            {
               String value = jsonArray.getString(i);
      
               String[] parts = value.split(Pattern.quote(","));
      
                for (int j=0; j<parts.length; j++)
                {
                  Log.e("Answer String ", "=" + parts[j]);
                }
           }
        } catch (JSONException e) {
            e.printStackTrace();
        }
      

      输出

      E/=>: ["Why is this broke, I don't know?","What is your favorite song, because I want to know"]
      E/Answer String: =Why is this broke
      E/Answer String: = I don't know?
      E/Answer String: =What is your favorite song
      E/Answer String: = because I want to know
      

      【讨论】:

      • 如果一个问题中没有逗号,那么 part2 = parts[1]; 它会导致异常。
      【解决方案4】:

      在阅读了所有建议的答案后,想出了一个简单的解决方案:

      首先,我存储了从外部数据库发送的答案 -

      final String jsonAnswers = gson.toJson (resp.getAnswer().getAnswerStringEdit());
      

      然后保存在共享首选项中 -

      editor.putString(Constants.ANSWER_EDIT,jsonAnswers);
      

      接下来阅读答案:

      String answerString = pref.getString(Constants.ANSWER_EDIT, "").trim();
      final String[] array = gson.fromJson (answerString, String[].class);
      

      最后,我可以使用数组中的数据设置我的 Edittext:

      et_answer1_edit.append(array[0].trim());
      
      et_answer2_edit.append(array[1].trim());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-07
        • 2018-12-21
        • 1970-01-01
        • 2017-01-05
        • 2017-08-24
        • 2012-05-24
        相关资源
        最近更新 更多