有没有办法从 TextView 变量中 select 特定字符?

Is there a way to select specific characters from a TextView variable?

我正在使用 AWS IoT 从微电子传感器读取和发布一些信息。我能够在应用程序中将 json 文件作为一大堆文本获取,但它的可读性不是很好。我正在使用 TextView,因为我不希望用户能够更改信息。我的问题是我找不到删除用户不需要的部分的方法。

我是应用程序创建的新手,所以我正在尝试尽可能简单地进行此操作。我已经 xml 准备好接收信息了;我只需要可以传递给它的变量中的信息。我已经尝试实现一个字符数组,但无法克服无法编辑文本视图的事实。

        tvLastMessage = (TextView) findViewById(R.id.tvLastMessage);

这是我当前收到的文本块。它看起来像这样:

{"sensors":[{"name":"steamTemp","data":"181.39","state":1,
{"name":"waterTemp","data":"-713.15","state":0,
{"name":"waterFlow","data":"0.00","state":3,
{"name":"dieselFlow","data":"0.00","state":2,
{"name":"manualResetLevel","data":"1","state":0,
{"name":"waterFeederLevel","data":"1","state":0,
{"name":"autoResetPressure","data":"1","state":0,
{"name":"manualResetPressure","data":"1","state":0},
{"name":"tempLimit","data":"1","state":0,
{"name":"heatEff","data":"0.00","state":2}]}

文本看起来不像这样格式化,但以这种方式表示更易理解和可读。它通常没有新行,所以当空间用完时它会自然地转到新行。

我希望我可以让它简单地显示与每个 "name" 和 "data" 相关的数字,因为我已经将这些硬编码到我的 xml 中,因为它们没有不改变。将这些数字放入不同的变量中是理想的,这样我就可以简单地在我的 xml 文件中引用该变量。但是,如果有更好的方法,我很乐意提出建议!

尝试使用循环查找 "name"、"data" 和 "state" 的每个实例,并获取它们之间的值。

假设输入是一个字符串:

String string = "{\"sensors\":[{\"name\":\"steamTemp\",\"data\":\"181.39\",\"state\":1,\n{\"name\":\"waterTemp\",\"data\":\"-713.15\",\"state\":0,\n{\"name\":\"waterFlow\",\"data\":\"0.00\",\"state\":3,\n{\"name\":\"dieselFlow\",\"data\":\"0.00\",\"state\":2,\n{\"name\":\"manualResetLevel\",\"data\":\"1\",\"state\":0,\n{\"name\":\"waterFeederLevel\",\"data\":\"1\",\"state\":0,\n{\"name\":\"autoResetPressure\",\"data\":\"1\",\"state\":0,\n{\"name\":\"manualResetPressure\",\"data\":\"1\",\"state\":0},\n{\"name\":\"tempLimit\",\"data\":\"1\",\"state\":0,\n{\"name\":\"heatEff\",\"data\":\"0.00\",\"state\":2}]}";
Map<String, Double> map = new HashMap<>();

int index0 = 0, index1, index2;

while (true) {
    // Get indices
    index0 = string.indexOf("name", index0);
    index1 = string.indexOf("data", index0);
    index2 = string.indexOf("state", index1);

    // If "name", "data", or "state" was not found
    if (index0 == -1 || index1 == -1 || index2 == -1)
        break;

    // Get the data from the string and put it into the map
    String key = string.substring(index0 + 7, index1 - 3);
    Double value = Double.parseDouble(string.substring(index1 + 7, index2 - 3));
    map.put(key, value);

    // Update index
    index0 = index2;
}

System.out.println(map);

输出:

{waterFlow=0.0, manualResetLevel=1.0, waterFeederLevel=1.0, manualResetPressure=1.0, waterTemp=-713.15, autoResetPressure=1.0, tempLimit=1.0, dieselFlow=0.0, heatEff=0.0, steamTemp=181.39}