【问题标题】:Character extract challenge人物提取挑战
【发布时间】:2014-09-19 15:13:47
【问题描述】:

总线列的我的数据库值。 12,34,56,8,9, ...我试图仅提取总线编号而不是逗号并将它们添加到字符串 ArrayList。有人知道吗? :

我真的很困惑。这是我的代码:

for(int i =0; i< buses1.length() ; i++ )
{
        if(buses1.charAt(i) == ',')
        {



        }
        else
        {
            bus1 += Character.toString(buses1.charAt(i));
            buses.add(bus1);
        }
}

此时,代码是这样添加的,“1”、“2”、“3”、“4”而不是“12”、“34”...... 有人有理想吗?

【问题讨论】:

  • 我猜你想要一个分词器
  • 你为什么不用split方法呢?这比您尝试的要容易
  • String[] busNumbers = databaseValue.split(",");
  • 感谢各位大大的帮助,现在我可以继续我的项目了!

标签: java arrays string for-loop arraylist


【解决方案1】:

摆脱你当前的逻辑。您只需要String#split() 和分隔符为",",它将您的公交车号作为数组返回。

下面一行就够了

String[] numbers = columnValue.split(",");

那么你的 ArrayList 声明就变成了

List<String> busesList = new ArrayList<String>(Arrays.asList(numbers));

【讨论】:

  • 如果您想将字符串保存在List&lt;String&gt; 中,可以使用Arrays.asList(numbers)。我不得不提一下,这个操作比循环数组并手动将每个元素添加到列表中要便宜得多。
  • @Daniel 我正在路上 daniel :) 刚刚在您发表评论时进行了编辑。
  • @Daniel 你能检查一下asList docs吗?那Returns a fixed-size list backed by the specified array
【解决方案2】:

您所要做的就是使用“,”分隔符分割字符串。

List<String> buses = Arrays.asList(buses1.split(","));

编辑:确保通过这样做,buses 将是一个不可修改的列表(您无法在其中添加/删除元素的列表)。如果你需要一个可修改的列表,你可以很容易地把它包装成一个:

List<String> buses = new LinkedList<String>(Arrays.asList(buses1.split(",")));

【讨论】:

    【解决方案3】:

    其他答案已经解释了解决此问题的推荐方法。我只是想指出您当前尝试失败的原因。

    要达到你描述的效果,它实际上必须是这样的:

    for (int i = 0; i < buses1.length(); i++ ) {
        String bus1 = "";
        if (buses1.charAt(i) == ',') {
        } else {
            bus1 += Character.toString(buses1.charAt(i));
            buses.add(bus1);
        }
    }
    

    问题是您在错误的位置向列表中添加了“总线”。当您获得(一位或多位)巴士号码的最后一个字符时,您需要添加它。但是您正在为每个数字添加它。

    您的代码实际上需要是这样的:

    String bus1 = "";
    for (int i = 0; i < buses1.length(); i++ ) {
        if (buses1.charAt(i) == ',') {
          // When we see a comma, we know that is the end of the bus number.
          if (!bus1.isEmpty()) {
              buses.add(bus1);
              bus1 = "";
          }
        } else {
            // Accumulate the digits of the current bus number.
            bus1 += Character.toString(buses1.charAt(i));
        }
    }
    // Deal with stuff after the last comma.
    if (!bus1.isEmpty()) {
        buses.add(bus1);
    }
    

    请注意,我们可以通过几个重要的方式对此进行改进。但是使用此版本更容易看出与您的(假设的)原始代码的关系。

    【讨论】:

      猜你喜欢
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      相关资源
      最近更新 更多