为什么这个向量1的大小?

时间:2011-09-14 06:36:51

标签: java java-me

当我在调用以下方法后使用System.out.println显示向量的大小时,它会显示1,但它应显示2,因为String参数为“7455573;photo41.png;photo42.png }“。

private void getIdClientAndPhotonames(String csvClientPhotos)
{
    Vector vListPhotosOfClient = new Vector();
    String chainePhotos = "";
    String photoName = "";
    String photoDirectory = new String(csvClientPhotos.substring(0, csvClientPhotos.indexOf(';')));

    chainePhotos = csvClientPhotos.substring(csvClientPhotos.indexOf(';')+1);
    chainePhotos = chainePhotos.substring(0, chainePhotos.lastIndexOf(';'));
    if (chainePhotos.indexOf(';') == -1)
    {
        vListPhotosOfClient.addElement(new String(chainePhotos));
    }
    else    // aaa;bbb;...
    {
        for (int i = 0 ; i < chainePhotos.length() ; i++)
        {
            if (chainePhotos.charAt(i) == ';')
            {
                vListPhotosOfClient.addElement(new String(photoName));
                photoName = "";
                continue;
            }
            photoName = photoName.concat(String.valueOf(chainePhotos.charAt(i)));
        }
    }
}

因此,向量应该包含两个字符串photo41.png and photo42.png,但是当我打印向量内容时,我只得到photo41.png

我的代码出了什么问题?

4 个答案:

答案 0 :(得分:4)

你有两个直接问题。

第一个是对字符串的初始操作。这两行:

chainePhotos = csvClientPhotos.substring(csvClientPhotos.indexOf(';')+1);
chainePhotos = chainePhotos.substring(0, chainePhotos.lastIndexOf(';'));

应用于7455573;photo41.png;photo42.png时,最终会向您photo41.png

这是因为第一行删除了第一行;7455573;)的所有内容,第二行删除了从最后;开始的所有内容(;photo42.png)。如果你想要摆脱7455573;位,你就不需要第二行了。

请注意,单独解决此问题无法解决您的所有问题,您仍需要进行一次更改。

即使您的输入字符串(到循环)是正确的photo41.png;photo42.png,每次遇到分隔;时,您仍然只会向向量添加项目。该字符串末尾有 no 这样的分隔符,这意味着不会添加最终项目。

您可以通过在for循环之后立即执行以下操作来解决此问题:

if (! photoName.equals(""))
    vListPhotosOfClient.addElement(new String(photoName));

将捕获最终名称未被;终止的情况。

答案 1 :(得分:4)

答案对问题不再有效,因为它已被重新标记为 java-me 。如果它是Java(如开头),则仍然如此:如果需要处理csv文件,请使用String#split


分割字符串要容易得多:

 String[] parts = csvClientPhotos.split(";");

这将给出一个字符串数组:

 {"7455573","photo41.png","photo42.png"}

然后,您只需将parts[1]parts[2]复制到您的矢量。

答案 2 :(得分:1)

这两行是问题所在:

chainePhotos = csvClientPhotos.substring(csvClientPhotos.indexOf(';') + 1);
chainePhotos = chainePhotos.substring(0, chainePhotos.lastIndexOf(';'));

在第一个chainePhotos包含"photo41.png;photo42.png"之后,但第二个使photo41.png成为一个 - 它会在向量中仅使用一个元素来结束方法。

编辑:多么糟糕。

  1. 我用正确的输入(由OP提供)运行它并在上面做出评论。
  2. 然后我按照上面的建议修改了它,同时意外地将输入更改为7455573;photo41.png;photo42.png;,但是可能不正确,并且与输入方面的上述解释不符。
  3. 我希望有人不回答这个问题。

答案 3 :(得分:0)

您可以手动拆分字符串。如果带有;符号的字符串表示为什么你可以这样做?就这样做,

private void getIdClientAndPhotonames(String csvClientPhotos)
{
    Vector vListPhotosOfClient = split(csvClientPhotos);
}

private vector split(String original) {
Vector nodes = new Vector();
String separator = ";";
// Parse nodes into vector
int index = original.indexOf(separator);
while(index>=0) {
nodes.addElement( original.substring(0, index) );
original = original.substring(index+separator.length());
index = original.indexOf(separator);
}
// Get the last node
nodes.addElement( original );
return nodes;
}