Как заменить символы с помощью Regex - PullRequest
2 голосов
/ 17 ноября 2011

Я получил строку из IBM Mainframe, как показано ниже (2 байта графических шрифтов)

"; A; B; C; D; E; F; G; G; H; I; J; K; L; M; N; N; O; P; P; Q; R; S; T; T; U; V; W , X, Y, Z; а, Ь; с; д, е, е, ж, з, я, J, K, L, м; п; о, р, д, г; с; т, и; v ; ш; х; у; г, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, `; -;! =; ₩; ~;; @; #; $;%; ^ ; &; *; (;); _; +; | [;]; {};:; ";.?;,;; / <;>;;";

и я хочу изменить эти символы на 1-байтовые коды ASCII

Как я могу заменить их, используя java.util.regex.Matcher, String.replaceAll () в Java

целевые символы:

, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W; Х, Y, Z; а, Ь; с; д, е, е, ж, з, я, J, K, L, м; п; о, р, д, г; с; т, и; v; ш, х, у, г; 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; `; -;! =; \; ~;; @; #; $;%; ^; &; *; (;); _; +; | [;]; {};:; ";.?;,;; / <;>;;";

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Это не (как говорят другие респонденты) проблема кодировки символов, но регулярные выражения по-прежнему не тот инструмент.Если бы Java имел эквивалент оператора tr/// в Perl, , то был бы подходящим инструментом, но вы можете написать его достаточно легко вручную:

public static String convert(String oldString)
{
  String oldChars = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`-=₩~!@#$%^&*()_+|[]{}:"',./<>?";
  String newChars = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`-=\\~!@#$%^&*()_+|[]{}:\"',./<>?";

  StringBuilder sb = new StringBuilder();
  int len = oldString.length();
  for (int i = 0; i < len; i++)
  {
    char ch = oldString.charAt(i);
    int pos = oldChars.indexOf(ch);
    sb.append(pos < 0 ? ch : newChars.charAt(pos));
  }
  return sb.toString();
}

Я предполагаю, что каждый символв первой строке соответствует символу в той же позиции во второй строке, и что первый символ (U+3000, 'IDEOGRAPHIC SPACE') должен быть преобразован в пробел ASCII (U+0020).

Обязательно сохраните исходный файл как UTF-8 и включите опцию -encoding UTF-8 при компиляции (или попросите вашу IDE сделать это).

0 голосов
/ 17 ноября 2011

Не думайте, что это о регулярных выражениях, о кодировании. Должна быть возможность прочитать в строку с 2-байтовым, а затем записать его с любой другой кодировкой. Посмотрите здесь для поддерживаемых кодировок.

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