我必须从vCard(“ *。vcf”文件)中过滤特定容器。我过滤包含匹配的子字符串Photo;
的行,直到特定的字符串==
保存在我的imageEncoding
字符串中为止。不知何故,如果我想用imageEncoding
替换""
的空格,什么也不会替换。
“容器”示例:
PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==
代码段:
else if(line.contains("PHOTO;")){
String imageEncoding = line;
while(true){
line = reader.readLine();
if (line.contains("==")){
imageEncoding = imageEncoding+line;
break;
}
imageEncoding = imageEncoding+line;
}
//imageEncoding.replaceAll(" ","");
imageEncoding.replaceAll("\\s","");
System.out.println(imageEncoding);
}
带有“”的输出:
PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==
带有\ s 的输出:
PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==
应该是什么:
PHOTO;ENCODING=BASE64;JPEG:/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQE
CAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/==
该字符串长很多行,这只是一个片段。我试图替换\\s
,但还是没用。
答案 0 :(得分:5)
replaceAll在这里是多余的;它的第一个参数是正则表达式,您显然不需要它。只需使用.replace即可,尽管其名称也可以替换所有内容。
replaceAll(并替换)不修改字符串(Java中的字符串是不可变的)。他们制造了一个新的。因此,请尝试:imageEncoding.replaceAll(" ", "")
imageEncoding = imageEncoding.replace(" ", "")
答案 1 :(得分:4)
写
imageEncoding = imageEncoding.replaceAll(" ","");
字符串在Java中是不可变的。