当前位置: 首页 > 知识库问答 >
问题:

对于多个字符串使用相同的数组索引是一个很好的做法

颜经艺
2023-03-14

我的标题可能有点不恰当,但我真的不知道如何表述这个问题。

基本上,我有一个包含三列的数据库,其中包含文本字段。

我想从一列中提取所有值,并将它们分组为一个巨大的字符串,同时用\n分隔它们。

最后三个字符串应存储在单个字符串数组中。因此,我决定用三个列名查询数据库,并在整个表中循环:

    String[] columns = new String[] {KEY_DESCRIPTION, KEY_REPS, KEY_WEIGHT};
    Cursor c = sqlDB.query(DATABASE_TABLE, columns, null, null, null, null, null);
    String result[] = new String[3];
    
    int iDesc = c.getColumnIndex(KEY_DESCRIPTION);
    int iReps = c.getColumnIndex(KEY_REPS);
    int iWeight = c.getColumnIndex(KEY_WEIGHT);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())  //loop thru 
    {
        result[0] = result[0] + c.getString(iDesc) + "\n";
        result[1] = result[1] + c.getString(iReps) + "\n";
        result[2] = result[2] + c.getString(iWeight) + "\n";
    }       

    return result;

我以前使用过类似的方法来连接所有三个字符串,但现在我需要在这三个值之间进行某种分隔。

检索完这些值后,我想将它们分别插入Android文本视图:

文本视图1。setText(字符串[0]);

TextView2.set文本(字符串[1]);

文本视图3。setText(字符串[2]);

所以我的实际问题是我应该继续使用这个还是应该选择其他方式,比如每个字符串一个数组列表,等等。?

共有2个答案

杭柏
2023-03-14

我的建议是停止使用数组(如[]),尽可能使用数组列表。由于ArrayList是动态的,所以您可以不断添加数据。因此,不需要使用/n进行分隔。要么将结果更改为二维ArrayList,要么为每个列分别设置3个ArrayLists。然后

ResultsIdesc.add(c.getString(iDesc));
ResultsiReps.add(c.getString(iReps));

这样可以更容易地将它们写入文本视图。

赖运珧
2023-03-14

您可以编写一个小型(私有内部)类来保存这三个字符串,并给它们一个有意义的名称。当你回到你的代码时,你很可能不记得索引是什么意思:

class Data{
  public String description = "";
  public String reps = "";
  public String weight = "";
}

现在,你可以这样写:

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
  result.desciption += c.getString(iDesc) + "\n";
  result.reps       += c.getString(iReps) + "\n";
  result.weight     += c.getString(iWeight) + "\n";
}
// ...
TextView1.setText(result.description);
TextView2.setText(result.reps);
TextView3.setText(result.weight);

不过,关于效率的一点是:像这样连接字符串非常慢。您需要使用StringBuilder。看:弦乐真的那么慢吗?

 类似资料:
  • 我需要使用递归方法找到两个字符串之间第一个不同字符的索引。 具有预期产出的示例: rFirstDistinctPlace(“小包裹”、“小椒盐卷饼”)->8 rFirstDistinctPlace(“Gold Shadow”,“Gold Shadow”)->0 rFirstDistinctPlace(“Gold”、“Golda”)->4 rFirstDistinctPlace(“Gold”,“Go

  • 我有一个接收各种参数的REST API列表,这些参数旨在搜索、过滤和返回数据到前端。 正如您所注意到的,问题在于存在一些参数(年龄、位置),这些参数对于所有这些endpoint都是通用的。 我们的计划是,我们可能需要为所有这些endpoint引入一个新参数,如“性别”。是否有一种最佳实践可以跨API处理这些公共参数,这样我们就不需要修改每个控制器并添加新添加的请求参数? 控制器看起来像这样:

  • 问题内容: 我正在开发一个显示图像并播放数据库声音的应用程序。我正在尝试确定是否使用单独的JFrame从GUI向数据库添加图像。 我只是想知道使用多个JFrame窗口是否是一种好习惯? 问题答案: 我只是想知道使用多个JFrames是否是一种好习惯? 坏习惯(坏习惯)。 用户不友好:用户只希望看到一个图标时,会在任务栏中看到多个图标。加上编码问题的副作用。 * 编写和维护代码的噩梦: * 一个模态

  • 但是,这并不适用于String类。请参见下面的代码: 这是因为字符串类和自声明类之间的差异吗?谢谢你的帮助!

  • 说,我有一个字符串: 在这个字符串中,“内容”的位置是已知的。 现在,我想把最里面的div变成span标签。所以我想做的是: 在Java中有什么可以做到这一点吗?或者只是从指定的索引中获取子字符串的上一个和下一个出现的索引? 编辑:忘了指定div有未知的标签(可能有类和东西)和中间可能有东西(像例子中的标签)。