Пробельные символы строки не могут быть заменены в Java 8 - PullRequest
0 голосов
/ 17 января 2019

Я должен отфильтровать определенные контейнеры из 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, но это также не сработало.

Ответы [ 2 ]

0 голосов
/ 17 января 2019
  1. replaceAll здесь лишнее; первый аргумент - это регулярное выражение, и вам это явно не нужно. Просто используйте .replace, который, несмотря на название, также заменяет все.

  2. replaceAll (и replace) не изменяют строку (строки в java являются неизменяемыми). Они делают новый. Поэтому вместо imageEncoding.replaceAll(" ", "") попробуйте: imageEncoding = imageEncoding.replace(" ", "")

0 голосов
/ 17 января 2019

Запись

imageEncoding = imageEncoding.replaceAll(" ","");

Строки являются неизменяемыми в Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...