Как заменить одинарную кавычку в строке двумя одинарными кавычками в java? - PullRequest
0 голосов
/ 18 января 2020

У меня есть данные ниже в моем текстовом файле.

1|"John"|3,5400
2|"Jim"|7,7300
3|"Smith,Robin",3,4300
4|"O'Brien",10,8200

, и я хочу этот вывод:

(1,'John',3,5400)
(2,'Jim',7,7300)
(3,'Smith,Robin',3,4300)
(4,'O''Brien',10,8200)

В основном я хочу заменить | символ запятыми и двойной цитаты с одинарной кавычкой. Я могу добиться этого с помощью этого фрагмента кода:

String text2 = textAfterHeader.replaceAll("\\|", ",").replaceAll("\"", "'").replaceAll("[a-zA-Z]'[a-zA-Z]", "''");

вывод, который я получаю:

1,'John',3,5400
2,'Jim',7,7300
3,'Smith,Robin',3,4300
4,'''rien',10,8200

Но у меня есть еще одно требование, где мне нужно поместить две одинарные кавычки всякий раз, когда между строкой появляется одна кавычка, например, О'Брайен как О'Брайен. Но эта часть не работает.

Ответы [ 3 ]

3 голосов
/ 18 января 2020

Как было предложено @AndyTurner, вы можете упростить проблему, сначала заменив все ' на '', а затем заменив все " на '. Единственное, чего не хватает после этого, это круглые скобки, которые можно добавить в два этапа:

  1. Заменить все пробелы на ) ( (обратите внимание на пробел в скобках).
  2. Добавить ведущий ( и тянущийся ) к String.

Все вместе решение может выглядеть так:

final String output = "(" 
        + input
            .replace("'", "''")
            .replace("\"", "'")
            .replace("|", ",")
            .replace(" ", ") (")
        + ")";

Ideone demo

0 голосов
/ 18 января 2020

Попробуйте это регулярное выражение:

\ s * \ '\ s *

, и вызов "Заменить на" выполнит эту работу.

0 голосов
/ 18 января 2020

Возможное решение может быть:

String lineSeparator = System.getProperty("line.separator");
String output = new StringBuilder("(").append(
        input.replaceAll("\\|", ",")
        .replaceAll("'", "''") // (*)
        .replaceAll("\"", "'") // (**)
        .replaceAll(lineSeparator, ")" + lineSeparator + "("))
        .append(")").toString();

Обратите внимание, что замена (*) должна предшествовать (**). Поскольку вам необходимо заменить точные символы вместо переменных регулярных выражений, лучше использовать replace вместо replaceAll.

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