当我在调用以下方法后使用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
。
我的代码出了什么问题?
答案 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
成为一个 - 它会在向量中仅使用一个元素来结束方法。
编辑:多么糟糕。
7455573;photo41.png;photo42.png;
,但是可能不正确,并且与输入方面的上述解释不符。我希望有人不回答这个问题。
答案 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;
}