小弟想用java把mht文件中编码过的字符还原过来,例如
<Century;mso-hansi-font-family>&#65288;&#65336;&#65292;
原本是<Century;mso-hansi-font-family>(X,
我写的代码是:
System.out.println("Century;mso-hansi-font-family>&#65288;&#65336;&#65292;".replaceAll("&#([0-9]+);",String.valueOf((char)(Integer.parseInt("$1")))));
但是会出错,系统提示:NumberFormatException:For Input String:"$1"...
请问如何解决?
谢谢了!!!!!

解决方案 »

  1.   

    Integer.parseInt("$1")楼主这是从哪里学地?正确使用方法是 Integer.parseInt("1")。
      

  2.   

    请问doway(john)
    $1表示正则表达式第一个括号中的匹配内容,即([0-9]+)匹配的内容,实际上就是65288、65288等。这不对吗?请指教,谢谢!
      

  3.   

    此问题已经解决,用了较原始的方法。
    代码如下: String MhtUnicode2PlainText(String str)
     {
      if (str == null){return "";}
      try
      {
         CharArrayWriter buffer = new CharArrayWriter();
         for (int i = 0; i < str.length(); i++)
         {
          if (str.charAt(i) == '&')
          {
           i++;
           if(str.charAt(i)=='#')
           {
           i++;
           String tmp="";
           while(str.charAt(i)!=';')
           {
           tmp+=str.charAt(i);
           i++;
           }  
           buffer.write((char)Integer.parseInt(tmp));
           }
           else
           {
           buffer.write('&');
           buffer.write(str.charAt(i));
           }      
          }  
          else
          {
           buffer.write(str.charAt(i));
          }
         }
         
         return new String(buffer.toCharArray());
      }
      catch (Exception e)
      {
       e.printStackTrace();
       return "";
      }
     }请多指教