角色提取挑战

时间:2014-07-28 12:20:13

标签: java arrays string for-loop arraylist

总线列的MY数据库值。 12,34,56,8,9,...我试图只提取总线号而不是逗号并将它们添加到String ArrayList中。任何人都有任何想法? :

我真的很困惑。继承我的代码:

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



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

此时,代码正在添加,&#34; 1&#34;,&#34; 2&#34; ,&#34; 3&#34; ,&#34; 4&#34;不是&#34; 12&#34;,&#34; 34&#34; .... 任何人都有理想吗?

3 个答案:

答案 0 :(得分:5)

摆脱现有的逻辑。您只需要将String#split()作为","的分隔符,它将您的总线号码作为数组返回。

以下行就够了

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

然后你的ArrayList delcaration转为

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

答案 1 :(得分:1)

您所要做的就是使用&#39;&#39;来分割字符串。分隔符。

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

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

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

答案 2 :(得分:0)

其他答案已经解释了建议解决这个问题的方法。我只是想指出你目前的尝试失败的原因。

为了获得你描述的效果,它实际上必须是这样的:

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

问题是你要添加一个&#34;总线&#34;到错误点的列表。当您获得(单个或多个数字)总线号码的最后一个字符时,需要添加它。但是你要为每个数字添加它。

您的代码实际上必须是这样的:

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);
}

请注意,我们可以通过几种重要方式改进这一点。但是使用此版本可以更容易地看到与(假设的)原始代码的关系。