0

大家好,我是android dev的新手..你能帮我解决这个问题吗?我正在尝试获取字符串中的文件名。我知道我需要对它进行子串化,但我没有得到正确的输出。例如,我的字符串值为:

{"Filename":"23476-love-823873.jpg","ChunkId":1,"ChunkLength":201929,"FileLength":12122}

我只想获得“23476-love-823873.jpg”的文件名,我该怎么做?感谢您的帮助。

4

6 回答 6

1

你在那里有结构化数据,所以你不应该盲目地使用子字符串。相反,您可以将字符串解析为 JSON,然后访问新对象的相应属性。您可以从 org.json 导入一个 Android JSON 库。具体来说,您需要在此处使用解析器:http: //developer.android.com/reference/org/json/JSONTokener.html

于 2013-08-15T03:15:45.643 回答
1

鉴于:

yourstring= {"Filename":"23476-love-823873.jpg","ChunkId":1,"ChunkLength":201929,"FileLength":12122} 

试试这个代码:

    int startindex,endindex;
    startindex=indexOf(':');
    endindex=indexOf(',');
    String filename= yourstring.substring(startindex,endindex);
于 2013-08-15T03:20:16.267 回答
1

它看起来像一个结构化对象(HashMap、NameValuePair、JSON 等)。

无论如何,如果它是 String

 String mString = "{\"Filename\":\"23476-love-823873.jpg\",\"ChunkId\":1,\"ChunkLength\":201929,\"FileLength\":12122}";



   if(mString.contains("Filename")){
            int start=mString.indexOf("Filename")+11;// If file name is not at beginning, have to do like this.
            int end=mString.indexOf(",", start)-1;//-1 for excluding a double code
            String filename=mString.substring(start, end);
        }
于 2013-08-15T03:33:05.613 回答
0

它看起来像一个 JSON 字符串,有很多方法可以解析它。

请参阅关于 SO 的相同问题:Sending and Parsing JSON Objects

于 2013-08-15T03:17:01.127 回答
0

标准方法将使用 JSON 库将 String 反序列化为 Java 对象或 Map,然后获取属性值。如果太重,可以使用正则表达式。

于 2013-08-15T03:18:43.967 回答
0

那么如果该字符串是 json 响应并且您确定您将始终获得该字符串格式,那么它适用于使用@Abhishek 给出的方法。请参阅下面的示例,与他给出的相同。(很少修改)。

String sample = "{"Filename":"23476-love-823873.jpg","ChunkId":1,"ChunkLength":201929,"FileLength":12122}";

    Log.d("string", sample);
    int startindex,endindex;
    startindex = sample.indexOf(':');
    endindex   = sample.indexOf(',');
    String filename= sample.substring(startindex + 1,endindex);
    Log.d("result", filename);

你的日志会是这样的:

string {"Filename":"23476-love-823873.jpg","ChunkId":1,"ChunkLength":201929,"FileLength":12122}
result "23476-love-823873.jpg"
于 2013-08-15T05:10:30.250 回答