//Test.java
import java.util.*;
public class Test
{
  static public void main(String[] args)
  {
    System.out.println("---------------");
    String s = "\\u4e07\\u5b50\\u534e liushang";
    String c = "lkjhgj liushang";
    String s1;
    String c1;
    s1 = convertBackFromUnicode(s);
    c1 = convertBackFromUnicode(c);
    System.out.println(s);
    System.out.println(c);
    System.out.println(s1);
    System.out.println(c1);
  }
  public static String convertBackFromUnicode(String str)
  {
  int i;
  int flag = 0;
   if (str == null)
   {
           return null;
   }
   i = str.indexOf("\\u",0);
  if(str.indexOf("\\u") == -1)
  {
    return str;
  }
  StringTokenizer st = new StringTokenizer(str, "\\u", false);
if (st == null)
         {
 return null;
}
StringBuffer buf = new StringBuffer(200);
if (buf == null)
{
 return null;
}
while(st.hasMoreTokens())
{
 String string = st.nextToken();
 System.out.println("The value of the next Token  " + string);
 if(string.length() > 4 )
 {
   try
   {
 if (i > 0 && flag == 0)
 {
   buf.append(string);
   flag = 1;
 }
 else
 {
  buf.append(((char)Integer.parseInt(string.substring(0, 4), 16)));
  buf.append(string.substring(4));
  }
 }
 catch(Exception e)
 {
   buf.append(string);
  }
}
else
{
if(string.length() == 4)
{
try
{
if (i > 0 && flag == 0)
{
buf.append(string);
flag = 1;
}
else
buf.append(((char)Integer.parseInt(string, 16)));
}
catch(Exception e)
{
buf.append(string);
}
}
else
{
flag = 1;
buf.append(string.substring(0));
}
}
}
return buf.toString();
  }
}
运行后,含"\u"的字符串后面的"liushang"变成了"lishang",少了一个"u",怎么才能避免这个问题呢?

解决方案 »

  1.   

    StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。 下面的示例阐明了如何使用 String.split 方法将字符串分解为基本标记:      String[] result = "this is a test".split("\\s");
         for (int x=0; x<result.length; x++)
             System.out.println(result[x]);
     输出以下字符串:      this
         is
         a
         test