2

我从 IBM 大型机收到如下字符串(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();
}

我假设第一个字符串中的每个字符都对应于第二个字符串中相同位置的字符,并且第一个字符(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 回答