2

IBM Mainframe から以下のような文字列を受け取りました (2 バイトのグラフィック フォント)

" ;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X; Y;Z;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w; x;y;z;0;1;2;3;4;5;6;7;8;9;`;-;=;₩;~;!;@;#;$;%;^;&; *;(;);_;+;|;[;];{;};:;";';,;.;/;<;>;?;";

そして、これらの文字を1バイトのASCIIコードに変更したい

Javaでjava.util.regex.Matcher、String.replaceAll()を使用してこれらを置き換えるにはどうすればよいですか

対象キャラクター:

;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y ;Z;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x ;y;z;0;1;2;3;4;5;6;7;8;9;`;-;=;\;~;!;@;#;$;%;^;&;* ;(;);_;+;|;[;];{;};:;";';,;.;/;<;>;?;";

4

2 に答える 2

2

これは (他のレスポンダーが言っているように) 文字エンコードの問題ではありませんが、正規表現は依然として間違ったツールです。Java に Perl のtr///演算子と同等のものがある場合、それは適切なツールですが、十分に簡単にハンドコーディングできます。

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();
}

最初の文字列の各文字が 2 番目の文字列の同じ位置にある文字に対応し、最初の文字 ( U+3000, 'IDEOGRAPHIC SPACE') を ASCII スペース ( U+0020) に変換する必要があると想定しています。

ソースファイルは必ず UTF-8 で保存し、-encoding UTF-8コンパイル時にオプションを含めてください (または、IDE にそうするように指示してください)。

于 2011-11-17T14:27:27.767 に答える
0

これは正規表現に関するものだとは思わないでください。エンコーディングに関するものです。2 バイトの文字列を読み取ってから、他のエンコーディングで書き込むことができるはずです。サポートされているエンコーディングについては、こちらをご覧ください。

于 2011-11-17T09:22:06.407 に答える